Widoki nagłówków tabel w StoryBoards

191

Czy istnieje sposób na wstawienie widoku nagłówka tabeli (tableHeaderView) w StoryBoard (tak jak robiliśmy to w Konstruktorze interfejsów)?

Tyler DeWitt
źródło

Odpowiedzi:

349

Wygląda na to, że po prostu przeciąga się kontrolkę na górę widoku tabeli. Nie spodziewałem się, że to będzie takie łatwe.

Przed upuszczeniem

Przed upuszczeniem

Po upuszczeniu

Po upuszczeniu

Pan Rogers
źródło
29
Zaskoczyło mnie, że tak to się robi. Zauważyłem w mojej implementacji, że aby to działało poprawnie, musiałem usunąć kod sekcji heightForHeaderInSection: (NSInteger), w przeciwnym razie skończyłbym z dodatkową przestrzenią nad samym widokiem nagłówka. Ponadto, aby nagłówek mógł się „przykleić” u góry widoku tabeli, musiałem zaimplementować sekcję viewForHeaderInSection: (NSInteger) i zwrócić ten widok.
ozz
13
Wydaje się, że działa to tylko wtedy, gdy masz co najmniej jedną prototypową komórkę w tabeli.
Accatyyc
4
@cdo, czy możesz wyjaśnić, w jaki sposób udało Ci się sprawić, by nagłówek „przykleił się” u góry widoku tabeli? Próbowałem wdrożyć na ślepo viewForHeaderInSection:i wystąpił błąd „Nie można jednocześnie spełnić ograniczeń”. (Patrz moje pytanie tutaj: stackoverflow.com/questions/14554051/... )
ryanrhee
2
Dzięki, nie mogłem tego zrobić, dopóki nie wiedziałem, że to zadziała, wymagał precyzyjnego przeciągania. Próbowałem to zrobić wiele razy ...
Dave Ross
1
Możesz użyć konturu po lewej stronie, aby przeciągnąć, co jest łatwiejsze niż próba trafienia dokładnie w miejsce nad pierwszą komórką prototypową, jeśli chcesz ustawić widok nagłówka tabeli. Zauważyłem - może błąd Xcode (5.0) - że zadziała to tylko wtedy, gdy najpierw przeniosę widok z normalnej hierarchii; Przeciągnąłem go do końca konturu dla tej sceny. Następnie, w drugim kroku, mógłbym przenieść go do widoku tabeli.
Daniel Schneller
10

Możesz to zrobić łatwo, przeciągając UIView/ UIImageViewtuż poniżejUITableView konturem dokumentu (zamiast układu).

Jeśli spróbujesz przeciągnąć w układzie zamiast konturu dokumentu, UITableViewCellprzejdzie on do najwyższego poziomu obsługi, co jest frustrujące!

PANKAJ VERMA
źródło
-2

Przeciąganie i upuszczanie widoku na górze widoku tabeli działało tylko dla jednego rozmiaru ekranu, przynajmniej w Xcode 11. Nie działało dobrze na różnych ekranach.

Właśnie utworzyłem widok i zostawiłem go za widokiem tabeli w scenorysie. Stworzyłem dla niego IBOutlet:

@IBOutlet weak var audioView: UIView!

Następnie w kodzie widoku tabeli zrobiłem:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return audioView
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 142
}

Działa dobrze na wszystkich rozmiarach ekranu.

Badr
źródło
1
Pytanie dotyczy widoku nagłówka tabeli, a nie widoków nagłówka sekcji.
R. Rincón
@R. Rincón, gdzie wspomniałem o nagłówku sekcji? Część metod jest niezbędna z frameworka. Każdy TableView ma co najmniej jedną sekcję, jeśli o tym nie wiesz. Wystarczy przekazać sekcję 0, jeśli nie masz sekcji.
Badr
Ten kod zwraca audioView dla każdej sekcji jako nagłówek sekcji. Jeśli ktoś to zaimplementuje, tableView.tableHeaderView będzie zero. Jeśli mają 5 sekcji, będą mieli pięć nagłówków sekcji. Jeśli mają już nagłówki sekcji i chcą dodać widok nagłówka tabeli, ta odpowiedź im nie pomoże. To nie odpowiada na pytanie, które konkretnie wspomina tableHeaderView.
R. Rincón
Możesz określić widok nagłówka dla każdej sekcji z pewną logiką w metodzie. TableViews zbudowany z myślą o sekcjach. Zawsze masz sekcje, jeśli nie, to byłaby to sekcja 0. Nie ma metody określania widoku nagłówka bez podania sekcji.
Badr