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

wodza
źródło
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;
}
Ajaxharg
źródło
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ć.

paulthenerd
źródło
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];
}
BadPirate
źródło
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)

ronhippler
źródło
4

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

Muvimotv
źródło
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.

Jason George
źródło
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];
}
Hendrik
źródło
[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];
}
Yogesh D.
źródło
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