Mam UITableView z dwiema sekcjami. To jest prosty widok tabeli. Używam viewForHeaderInSection do tworzenia niestandardowych widoków dla tych nagłówków. Na razie w porządku.
Domyślne zachowanie przewijania polega na tym, że po napotkaniu sekcji nagłówek sekcji pozostaje zakotwiczony poniżej paska nawigacji, dopóki następna sekcja nie zostanie przewinięta do widoku.
Moje pytanie brzmi: czy mogę zmienić domyślne zachowanie, tak aby nagłówki sekcji NIE były zakotwiczone u góry, ale raczej przewijały się pod paskiem nawigacji wraz z pozostałymi wierszami sekcji?
Czy brakuje mi czegoś oczywistego?
Dzięki.
ios
iphone
uitableview
cocoa-touch
davidjhinson
źródło
źródło
Odpowiedzi:
Sposób, w jaki rozwiązałem ten problem, to wyregulowanie
contentOffset
zgodniecontentInset
zUITableViewControllerDelegate
(rozszerzaUIScrollViewDelegate
) w następujący sposób:Jedynym problemem jest to, że traci trochę odbicia podczas przewijania do góry.
{UWAGA: „40” powinno być dokładną wysokością nagłówka TWOJEJ sekcji 0. Jeśli użyjesz liczby większej niż wysokość nagłówka sekcji 0, zobaczysz, że ma to wpływ na dotyk (spróbuj na przykład „1000”, a zobaczysz, że zachowanie odbijania jest trochę dziwne na górze). jeśli liczba odpowiada wysokości nagłówka sekcji 0, dotyk palca wydaje się być doskonały lub prawie doskonały.}
źródło
Możesz także dodać sekcję z zerową liczbą wierszy na górze i po prostu użyć stopki poprzedniej sekcji jako nagłówka następnej.
źródło
Gdybym to robił, wykorzystałbym fakt, że UITableViews w stylu Plain mają lepkie nagłówki, a te w stylu zgrupowanym nie. Prawdopodobnie przynajmniej spróbowałbym użyć niestandardowej komórki tabeli, aby naśladować wygląd zwykłych komórek w zgrupowanej tabeli.
Właściwie tego nie próbowałem, więc może to nie zadziałać, ale radziłbym to zrobić.
źródło
tableView.separatorColor = [UIColor clearColor];
aby naśladować zwykły widok tabeli.Wiem, że przychodzi późno, ale znalazłem ostateczne rozwiązanie!
Jeśli masz 10 sekcji, pozwól, aby źródło danych zwróciło 20. Użyj liczb parzystych jako nagłówków sekcji i liczb nieparzystych do zawartości sekcji. coś takiego
Voilá! :RE
źródło
UITableView
, którego używam.Jest kilka rzeczy, które należy zrobić, aby rozwiązać ten problem w niehackerski sposób:
UITableViewStyleGrouped
backgroundColor
na[UIColor clearColor]
backgroundView
w każdej komórce widoku tabeli pusty widok za pomocąbackgroundColor [UIColor clearColor]
rowHeight
lub nadpisz,tableView:heightForRowAtIndexPath:
jeśli poszczególne wiersze mają różne wysokości.źródło
UITableViewStyleGrouped
komórki tabeli mają dodatkowe marginesy, które zmieniają ich wyrównanie z nagłówkiem. Jest to problem, gdy faktycznie chcesz przedstawić tabelę wielokolumnową i użyć nagłówka do pokazania tytułów kolumn (a następnie wyrównać poszczególne wpisy tabeli z tymi tytułami).Pierwotnie opublikowane Tutaj , szybkie rozwiązanie z wykorzystaniem IB. To samo można zrobić programowo, choć po prostu.
Niektórzy komentowali, że to rozwiązanie ukrywa pierwszy nagłówek, jednak nie zauważyłem takiego problemu. U mnie zadziałało idealnie i było zdecydowanie najprostszym rozwiązaniem, jakie do tej pory widziałem.
źródło
Nie podobały mi się dotychczas opisane tutaj rozwiązania, więc starałem się je łączyć. Rezultatem jest następujący kod, zainspirowany @awulf i @cescofry. U mnie to działa, ponieważ nie mam prawdziwego nagłówka widoku tabeli. Jeśli masz już nagłówek widoku tabeli, może być konieczne dostosowanie wysokości.
źródło
Po prostu zmień styl TableView:
Dokumentacja UITableViewStyle :
źródło
Wybierz styl zgrupowanego widoku tabeli z inspektora atrybutów tableView w scenorysie.
źródło
Ustaw headerView tabeli z przezroczystym widokiem z tą samą wysokością nagłówka w widoku przekroju. Zainicjuj także widok tabeli z ramką na wysokości.
źródło
Znalazłem alternatywne rozwiązanie, użyj pierwszej komórki każdej sekcji zamiast prawdziwej sekcji nagłówka, to rozwiązanie nie wygląda tak czysto, ale działa tak dobrze, że możesz użyć zdefiniowanej komórki prototypowej dla sekcji nagłówków oraz w metodzie cellForRowAtIndexPath zapytaj o indexPath.row == 0, jeśli prawda, użyj komórki prototypowej sekcji nagłówka, w przeciwnym razie użyj domyślnej komórki prototypowej.
źródło
indexPath.row
&indexPath.section
, upewnij się, że zwracasz wysokość0.0f
for,- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
aby nagłówki były niewidoczne.Zmień styl TableView:
Zgodnie z dokumentacją Apple dla UITableView:
źródło
Teraz, gdy zgrupowany styl wygląda w zasadzie tak samo jak zwykły styl w iOS 7 (pod względem płaskości i tła), dla nas najlepszą i najłatwiejszą (tj. Najmniej hakerską) poprawką była po prostu zmiana stylu widoku tabeli na zgrupowany. Jacking z contentInsets zawsze stanowił problem, gdy zintegrowaliśmy pasek nawigacji z przewijaniem na górze. Ze zgrupowanym stylem widoku tabeli wygląda dokładnie tak samo (z naszymi komórkami), a nagłówki sekcji pozostają niezmienione. Bez przewijania dziwności.
źródło
Przypisz ujemną wstawkę do swojego tableView. Jeśli masz nagłówki sekcji o wysokości 22 pikseli i nie chcesz, aby były lepkie, zaraz po ponownym załadowaniu danych dodaj:
U mnie działa jak urok. Działa również dla stopek sekcji, zamiast tego przypisz ujemną wstawkę na dole.
źródło
Dodaję tabelę do widoku przewijania i wydaje się, że działa dobrze.
źródło
Sprawdź moją odpowiedź tutaj . Jest to najłatwiejszy sposób na zaimplementowanie niepływających nagłówków sekcji bez żadnych hacków.
źródło
Odpowiedź @ LocoMike najlepiej pasowała do mojego tableView, jednak zepsuła się również podczas używania stopek. To jest poprawione rozwiązanie w przypadku używania nagłówków i stopek:
źródło
Szybka wersja odpowiedzi @awulf, która działa świetnie!
źródło
Dowiedziałem się, że wystarczy ustawienie właściwości tableHeaderView, czyli:
i to wszystko.
źródło