Ponieważ projekt widoków tabel używających stylu zgrupowanego znacznie się zmienił w iOS 7, chciałbym ukryć (lub usunąć) nagłówek pierwszej sekcji. Jak dotąd nie udało mi się tego osiągnąć.
Nieco uproszczony mój kod wygląda następująco:
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return 0.0f;
return 32.0f;
}
- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (section == 0) {
UIView* view = [[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 640.0f, 0.0f)];
return view;
}
return nil;
}
- (NSString*) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return nil;
} else {
// return some string here ...
}
}
Jeśli zwrócę wysokość 0, pozostałe dwie metody nigdy nie zostaną wywołane z indeksem sekcji 0. Jednak pusty nagłówek sekcji jest nadal rysowany z domyślną wysokością. (W iOS 6 te dwie metody są wywoływane. Jednak widoczny wynik jest taki sam).
Jeśli zwrócę inną wartość, nagłówek sekcji otrzyma określoną wysokość.
Jeśli zwrócę 0,01, jest prawie poprawne. Jednak kiedy włączam w symulatorze "Niepoprawne kolory", oznacza to wszystkie komórki widoku tabeli (co wydaje się logiczną konsekwencją).
Odpowiedzi na pytanie UITableView: ukryj nagłówek z pustej sekcji wydają się wskazywać, że niektórym osobom udało się ukryć nagłówek sekcji. Ale może to dotyczyć stylu prostego (zamiast zgrupowanego).
Jak dotąd najlepszym kompromisem jest zwrócenie wysokości 0,5, co skutkuje nieco grubszą linią poniżej paska nawigacji. Byłbym jednak wdzięczny, gdyby ktoś wiedział, jak można całkowicie ukryć nagłówek pierwszej sekcji.
Aktualizacja
Według analizy caglara ( https://stackoverflow.com/a/19056823/413337 ) problem pojawia się tylko wtedy, gdy widok tabeli jest zawarty w kontrolerze nawigacyjnym.
źródło
section == 0
.Odpowiedzi:
Mam obejście, które wydaje mi się dość czyste. Więc odpowiadam na własne pytanie.
Ponieważ 0, ponieważ wysokość nagłówka pierwszej sekcji nie działa, zwracam 1. Następnie używam contentInset, aby ukryć tę wysokość pod paskiem nawigacji.
Cel C:
Szybki:
źródło
CGFLOAT_MIN
zamiast wartości zakodowanej na stałe. Innymi słowy, nie rób tegoreturn 1.0f
lub0.1f
zamiast tego,return CGFLOAT_MIN
jeśli Apple kiedykolwiek zmieni minimalną dopuszczalną wartość, będziesz mieć kod do zmiany, jeśli zakodujesz wartość zwracaną na stałe. Ponadto nie wiesz już, czy używasz najmniejszej możliwej wartości. Używając zdefiniowanej stałej, masz gwarancję, że użyjesz najmniejszej możliwej wartości, a Twój kod przetrwa zmiany systemu operacyjnego.Oto jak ukryć nagłówek pierwszej sekcji w UITableView (styl zgrupowany).
Rozwiązanie Swift 3.0 i Xcode 8.0
Delegat TableView powinien implementować metodę heightForHeaderInSection
W ramach metody heightForHeaderInSection zwróć najmniejszą liczbę dodatnią. (nie zero!)
źródło
CGFLOAT_MIN
dla objc jest identyczny jakCGFloat.leastNonzeroMagnitude
w SwiftOdpowiedź była bardzo zabawna dla mnie i dla mojego zespołu i zadziałała jak urok
POWÓD:
Zauważyliśmy, że dzieje się tak tylko w przypadku pierwszego widoku w hierarchii widoków, jeśli ten pierwszy widok jest UITableView . Tak więc wszystkie inne podobne UITableViews nie mają tej irytującej sekcji, z wyjątkiem pierwszej. Próbowaliśmy przenieść widok UITableView z pierwszego miejsca w hierarchii widoków i wszystko działało zgodnie z oczekiwaniami.
źródło
contentInset
na przykład{0, 64, 0, 0}
ustawić przesunięcie 64px od góry (pasek stanu plus pasek nawigacji). The tableView musi być przymocowany na górze ekranu, a nie topLayoutGuide (do niech dotrzeć pod paskiem nawigacyjnym)Użyj tej sztuczki dla grupowego typu tableView
Skopiuj wklej poniższy kod dla widoku tabeli w metodzie viewDidLoad :
źródło
_tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 1)]
.ten sposób jest OK.
źródło
Właśnie skopiowałem twój kod i spróbowałem. Działa normalnie (wypróbowane w symulatorze). Załączam widok wyniku. Chcesz takiego widoku, prawda? Albo źle zrozumiałem twój problem?
źródło
Swift3: heightForHeaderInSection działa z 0, musisz tylko upewnić się, że nagłówek jest ustawiony na clipsToBounds.
jeśli nie ustawisz clipsToBounds, ukryty nagłówek będzie widoczny podczas przewijania.
źródło
Aktualizacja [19.09.17]: Stara odpowiedź nie działa już dla mnie w iOS 11. Dzięki Apple. Zrobili to:
Poprzednia odpowiedź:
Jak napisał w komentarzach Chrisa Ostomo, działały dla mnie:
źródło
Oto jak pozbyć się nagłówka górnej sekcji w zgrupowanym UITableView w Swift:
źródło
W Swift 4.2 i wielu wcześniejszych wersjach, zamiast ustawiać wysokość pierwszego nagłówka na 0, jak w innych odpowiedziach, możesz po prostu ustawić inne nagłówki na
nil
. Powiedzmy, że masz dwie sekcje i chcesz, aby tylko druga (tj.1
) Miała nagłówek. Ten nagłówek będzie miał tekst Foobar :źródło
Spróbuj tego, jeśli chcesz całkowicie usunąć cały nagłówek sekcji
źródło
Nie mogę jeszcze komentować, ale pomyślałem, że dodam, że jeśli masz
UISearchController
na kontrolerzeUISearchBar
jako swójtableHeaderView
, ustawienie wysokości pierwszej sekcji na 0heightForHeaderInSection
cali rzeczywiście działa.Używam
self.tableView.contentOffset = CGPointMake(0, self.searchController.searchBar.frame.size.height);
tak, że pasek wyszukiwania jest domyślnie ukryty.W rezultacie nie ma nagłówka dla pierwszej sekcji, a przewijanie w dół pokaże pasek wyszukiwania tuż nad pierwszym wierszem.
źródło
Najłatwiej jest zdecydowanie wrócić
nil
, lub""
wfunc tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
odniesieniu do segmentu, w którym nie chcesz wyświetlać nagłówka.źródło
Wersja Swift: Swift 5.1
Przeważnie możesz ustawić wysokość w delegacie tableView w następujący sposób:
Czasami, gdy utworzyłeś UITableView z Xib lub Storyboard, odpowiedź up nie działa. możesz wypróbować drugie rozwiązanie:
Mam nadzieję, że to działa dla Ciebie!
źródło