2016-06-01 3 views
0

Ich habe einen UIViewController in Interface Builder konfiguriert. Es enthält eine UITableView und eine UIView als Kopfzeile und eine weitere UIView als Fußzeile.UITableViews tableFooterView wird auf sehr seltsame Weise angezeigt

(Bitte beachten Sie, dass diese beiden UIViews, die als Kopf- und Fußzeilen sind NICHT Abschnitt Kopf- und Fußzeilen. Handeln)

Der Header einfach toll funktioniert. Im Interface Builder ist UITableView auf die Superansicht ausgerichtet (oben: 0, unten: 0, vorangestellt: 0, nachgestellt: 0). Dann richtete ich die HeaderView (UIView) an die Spitze der UITableView ausgerichtet, so dass sie die gleiche Breite und horizontale Zentrierung auf die UITableView auch. Die Höhe des HeaderView wird entsprechend seiner Unteransicht konfiguriert.

In der .m-Datei, habe ich

self.myTableView.tableHeaderView = self.headerView; 

Alles perfekt funktioniert. Sicher genug, das HeaderView ist an der Spitze des UITableView fixiert, und wenn Sie nach unten scrollen, scrollt das HeaderView damit und verschwindet vom Bildschirm. Ausgezeichnet.

Ich dachte, ich würde das gleiche mit der Fußzeile tun. In der Tat habe ich genau das gleiche gemacht, außer dass ich die Fußzeile auf die UITableView ausgerichtet habe (ja, die beiden haben gleiche Breiten und horizontale Zentrierung). Ich stelle die footerView-Höhe auf einen festen Wert ein.

In der .m-Datei, füge ich diese Codezeile:

self.myTableView.tableFooterView = self.footerView; 

Und das ist, wo es komisch wird ... Wenn ich nach unten scrollen, Raum gibt für die UIView footerView ist, genau entsprechend der Höhe der footerView, die ich in Interface Builder angegeben habe.

Und wenn ich zurück scrollen, meinen Finger auf der Rolle halten, um PAST die Spitze des UITableView zu gehen, sind die Unteransichten der Fußzeile OBEN! WTF!

Versteht das jemand?

Alles wird in Interface Builder konfiguriert und die Eigenschaften tableHeaderView und tableFooterView werden in der viewDidLoad: -Methode zugewiesen.

+0

Haben Sie versucht, die Eigenschaften der Kopf- und Fußzeile in viewDidLayoutSubviews zuzuweisen: anstelle von viewDidLoad :? –

+0

Wenn Sie die Fußzeilen- und Kopfzeileneigenschaften in viewDidLayoutSubviews festlegen, ist die Fußzeilenansicht im unteren Teil des Bildschirms sichtbar, ohne nach unten zu scrollen (etwa in der Mitte von UITableView). Wenn ich nach unten scrolle, bewegt es sich mit den Zellen der Tabellenansicht nach oben ... nicht das gewünschte Verhalten. – ArthurVonBabylon

Antwort

0

Dies ist die hässliche, hacky Lösung, so weit.

Die FooterView und die UITableView haben ihre Böden ausgerichtet, und ich verbinde diese Einschränkung mit der .m-Datei als eine Eigenschaft (BottomToBottomConstraint). Ich setze dann myTableView.contentSize.height auf die bottomToBottomConstraint.constant, und die Ansicht erscheint dort, wo ich sie haben möchte.

self.bottomToBottomConstraint.constant = self.myTableView.contentSize.height; 

Während es nur eine Zeile Code ist, würde ich lieber das Problem verstehen und eine echte Lösung implementieren ... erwartet Ihr Wissen!

Verwandte Themen