UITableView'da bölüm başlığı için varsayılan yükseklik


125

UITableView'umdaki ilk başlığın yüksekliğini ayarlamak istiyorum. Diğer başlıklar için bunların varsayılan yükseklikte kalmasını istiyorum. Aşağıdaki kodda "someDefaultHeight" yerine hangi değeri / sabiti koyabilirim?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return someDefaultHeight;
}

Teşekkürler


neden mutlu olduğun yeri belirleyene kadar farklı değerler denemiyorsun?
Daniel

4
@Daniel - Apple varsayılan satır yüksekliği değerini değiştirmeye karar verirse, uygulamamın bu değeri sabit kodlamadığından emin olmalıyım (keyfi bir miktarda). En iyisi, bir yerde beyan edilmişse, bu bilgiyi sabitten çıkarmaktır.
rein

Yanıtlar:


204

IOS 5.0'dan itibaren, temsilci yöntemlerinin çoğunda UITableViewAutomaticDimension'ı döndürebilirsiniz. Dokümantasyon sayfasının altında

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}

1
hmm .. Bana gelince (sabit kodlanmış sabit) UITableViewAutomaticDimensiondöndürür -1ve benim içinde hiç bölüm görmüyorum UITableView.
skywinder

neden UITableViewAutomaticDimension-1 gösterirken NSLog?
S1U

30
Bu yalnızca alan kullandığınızda işe - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionyarar : - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionyöntemi uyguluyorsanız , bu işe yaramaz.
SuperSaiyen

2
Bunu ve delege tahmin yöntemini uygularsanız ve döndürürseniz UITableViewAutomaticDimension, sıfır yüksekliğe sahip olacaktır.
Sam Soffes

4
@SuperSaiyen - Sizinle çalışır, viewForHeaderInSectionsadece ayarlamanız gerekirestimatedSectionHeaderHeight
Robert

48

Uygulamamdaki varsayılanları kontrol ettiğimde, gruplanmış bir tablo için varsayılan yükseklik 22'dir ve gruplanmamış bir tablo için varsayılan yükseklik 10'dur.

Tablonuzdaki sectionHeaderHeight özelliğinin değerini kontrol ederseniz, size bunu söyleyecektir.


1
Teşekkürler ... Bunu buna kodlayacağım. Keşke bu değer için bir sabit olsaydı.
dizginleyin

3
Bunlar geriye doğru var. UITableViewStyleGroupedUITableViewStylePlain
yaşında

25

Aslında hile yap :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}

2
Sanırım demek istedin return [self.tableView sectionHeaderHeight];ya da daha iyisi return [tableView sectionHeaderHeight];. Ancak, belki de uç veya film şeridi kullanmadığım için ikisi de -1 döndürüyor.
jk7

7

Tamlık adına: iOS7 + 'da, gruplanmış stil bölüm başlıklarının yüksekliği 55.5ilk ve 38sonraki başlıklar içindir. (DCIntrospect ile ölçülmüştür)


4

Swift 4.2 için UITableView.automaticDimension döndürmelisiniz


2

Burada doğru cevabın ne olduğundan emin değilim, ancak ne 10 ne de 22, iOS 5'te gruplanmış bir tablo görünümü için doğru yükseklik değil gibi görünüyor. Bu soruya göre 44 kullanıyorum ve en azından kabaca görünüyor doğru yükseklik.


2

Varsayılan yüksekliği elde etmek için, bırakın superhalledin:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return [super tableView:tableView heightForHeaderInSection:section];
}

[super tableView:tableView heightForHeaderInSection:section];Belki de uç veya film şeridi kullanmadığım için benim için 0 döndürüyor.
jk7

1
Bu yalnızca UITableViewController'ı alt sınıflara ayırıyorsanız çalışır.
Wallace

-1

Bu hile yapmalı

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}

Sanırım şunu demek istiyorsunreturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];bir hata üretir. Şunu mu demek istediniz [tableView sectionHeaderHeight];?
jk7
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.