Domyślna wysokość nagłówka sekcji w UITableView


125

Chcę ustawić wysokość pierwszego nagłówka w moim UITableView. W przypadku innych nagłówków chcę, aby pozostały domyślną wysokością. Jaką wartość / stałą mogę wstawić w miejsce „someDefaultHeight” w poniższym kodzie?

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

    return someDefaultHeight;
}

Dzięki


dlaczego nie próbujesz różnych wartości, aż osiągniesz to, z czego jesteś zadowolony?
Daniel

4
@Daniel - jeśli Apple kiedykolwiek zdecyduje się zmienić domyślną wartość wysokości wiersza, muszę upewnić się, że moja aplikacja nie zakoduje na stałe tej wartości (do jakiejś dowolnej kwoty). Najlepiej jest wyciągnąć tę informację ze stałej, jeśli jest gdzieś zadeklarowana.
wodza

Odpowiedzi:


204

W systemie IOS 5.0 i nowszych można zwrócić UITableViewAutomaticDimension w większości metod delegata. Znajduje się na dole strony z dokumentacją

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

1
hmm .. Jak dla mnie UITableViewAutomaticDimensionzwraca -1(stała stała) i nie widzę żadnych sekcji w moim UITableView.
skywinder

dlaczego UITableViewAutomaticDimensionpokazuje -1 kiedy NSLogto?
S1U

30
Działa to tylko wtedy, gdy używasz obszaru: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionjeśli implementujesz - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionmetodę, to nie działa.
SuperSaiyen

2
Warto zauważyć, że jeśli zaimplementujesz to i metodę delegata szacowania i zwrócisz UITableViewAutomaticDimension, będzie miała zerową wysokość.
Sam Soffes

4
@SuperSaiyen - To działa viewForHeaderInSection, wystarczy ustawićestimatedSectionHeaderHeight
Robert

48

Po sprawdzeniu ustawień domyślnych w mojej aplikacji wygląda na to, że dla zgrupowanej tabeli domyślna jest wysokość 22, a dla niezgrupowanej tabeli wysokość domyślna to 10.

Jeśli zaznaczysz wartość właściwości sectionHeaderHeight w widoku tabeli, która powinna Ci o tym powiedzieć.


1
Dzięki ... mocno to zakoduję. Chociaż chciałbym, żeby ta wartość była stała.
wodza

3
Masz to od tyłu. UITableViewStyleGroupedma 22 lata i UITableViewStylePlain10.
Michael Grinich

25

Właściwie załatw sprawę :)

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

2
Myślę, że miałeś na myśli return [self.tableView sectionHeaderHeight];lub jeszcze lepiej return [tableView sectionHeaderHeight];. Jednak oba zwracają dla mnie -1, być może dlatego, że nie używam stalówki ani storyboardu.
jk7

7

Gwoli ścisłości: w iOS7 + wysokość nagłówków sekcji w stylu zgrupowanych jest 55.5dla pierwszego i 38dla kolejnych nagłówków. (mierzone za pomocą DCIntrospect)


4

W przypadku wersji Swift 4.2 należy zwrócić UITableView.automaticDimension


2

Nie jestem pewien, jaka jest prawidłowa odpowiedź, ale ani 10, ani 22 nie wydają się być poprawną wysokością dla zgrupowanego widoku tabeli w iOS 5. Używam 44, na podstawie tego pytania i przynajmniej wydaje się, że z grubsza prawidłowej wysokości.


2

Aby uzyskać domyślną wysokość, po prostu superją obsłużmy:

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

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

[super tableView:tableView heightForHeaderInSection:section];zwraca dla mnie 0, być może dlatego, że nie używam stalówki ani scenorysu.
jk7

1
Działa to tylko wtedy, gdy tworzysz podklasę UITableViewController.
Wallace

-1

To powinno załatwić sprawę

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

myślę, że masz na myślireturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];generuje błąd. Czy miałeś na myśli [tableView sectionHeaderHeight];?
jk7
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.