Dynamische Höhe für UITableView ( Nicht Zelle )
Ich versuche eine UITableView
dass die Listen alle anderen HomeKit-Geräten eines Benutzers zur Verfügung hat.
Offensichtlich gibt es keine Möglichkeit zu wissen, wie viele Geräte Sie haben, so brauche ich, um das UITableView's
Höhe in das storyboard ändern.
Ich habe versucht, diese, ich nenne Sie in der viewDidLoad()
Funktion:
func adjustHeightOfTableView() {
//getting the height of the tableview
var tableHeight = self.tableView.contentSize.height
//the height of the content inside the view
var maxHeight = self.tableView.superview?.frame.size.height
//if the height of the content is bigger then the height of the tableview
if (maxHeight! > tableHeight) {
tableHeight = maxHeight!
//set the tableview height to be the content height
}
//trying to reload the tableview height?
self.view.layoutIfNeeded()
self.tableView.reloadData()
}
Ich versuche, einige UI-Elemente unter dem tableview, und ich möchte, dass Sie eine Menge Platz von der Unterseite der tableview, aber auch der tableview werden die Höhe, die benötigt werden, für welchen Betrag der Zellen gibt es.
Aber es funktioniert einfach nicht.
Wenn ich mache etwas falsch, oder wenn jemand weiß, wie diese Arbeit zu machen, lasst es mich bitte wissen.
Danke!
- Sie wollen abnehmen tableView ist die Höhe, wenn weniger Zellen auf dem Bildschirm, und es zeigt leere Zelle?
tableHeight = maxHeight!
nicht den tableView Höhe, nur einige Variablen. Sie ändern das Bild der tableView selbst. ZBself.tableView.frame = CGRectMake(...)
- Warum willst du die Höhe verändern irgendwie? Was ist der Punkt? Nur, um loszuwerden, einige Leerzeichen am Ende der Tabelle? Warum nicht Ihre Farbe transparent statt? Oder sind Sie wollen zu Schicht einige andere Elemente der Benutzeroberfläche bis zu nehmen, dass der Raum?
- Ich glaube, ich könnte nur die Höhe des Tableviews zu werden, größer als jede Anzahl von Zellen möglich, ich versuche, einige UI-Elemente unter dem tableview, und ich möchte, dass Sie eine Menge Platz von der Unterseite der tableview, aber auch der tableview werden die Höhe, die benötigt werden, für welchen Betrag der Zellen gibt es. Ich werde das in meine main post zu.
- Wenn Ihre Tabelle-Ansicht den ganzen Bildschirm einnimmt, fügen Sie einfach
tableView.tableFooterView = UIView()
zuviewDidLoad()
(dies entfernt die zusätzlichen Abscheider für nicht existierende Zeilen). Ansonsten geben Sie bei Ihrer Frage, wenn Ihre Tabelle-Ansicht angezeigt wird, wie z.B. pop, über, usw. - Hast du das problem lösen? Einige gute Antworten hier... hat jemand von Ihnen helfen?
- Ich habe nicht bekommen, es funktioniert 🙁 Danke für alle die geantwortet aber!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: Für diesen Ansatz müssen Sie statische Zelle Höhe oder herausfinden, einen Weg zu wissen, bevor die hand, was die insgesamt contentsize Höhe
Vorausgesetzt, Sie sind mit Einschränkungen, erstellen Sie folgende constraints auf Ihre
UITableView
(abgesehen von führenden und nachgestellten!)Fügen Sie ein Höhe-Einschränkung mit einer Priorität von 750 und Boden ein Abstand constraint-0 auf Ihr super Sicht, wird
>=
0 und haben eine Priorität von 1000. Erstellen Ausgang für diese Höhe die Einschränkung, dass Sie in IhrerUIViewController
Nun,
Nun, wenn Ihr
UITableView
Höhe ist weniger als super Sicht, keine Probleme! Aber wenn es größer ist als der Bildschirm Grenzen, es wird brechen die Höhe Zwang und voll-Bildschirm und zeigen Sie den Inhalt der Regel, wie Sie erwarten, dass einUITableView
zu!Bearbeiten:
Auch wenn Sie mit der
UIAutomaticRowDimensions
was Sie tun können, ist fügen Sie Einschränkungen programmgesteuert zu IhremUITableView
. ich.eNatürlich auch alle anderen Ansichten werden noch eine untere Beschränkung Ihrer
UITableView
.Erstellen Sie eine
UITableView
in Ihr storyboard mit normalen leading, trailing, oben und unten, um die super Aussicht. Abrufen der Daten. Holen Sie sich die contentSize für IhreUITableView
und entfernen Sie dann die untere Beschränkung. Fügen Sie nun eine Höhe Einschränkung, dass die minimale Wert IhrerUIScreen.main().bounds.size.height
undcontentSize
.können Sie Automatische Bemaßungen, wenn Sie mit autolayouts
angesichts didload:
Entfernen Sie die Funktion
In Ihrem code, müssen Sie:
Aber dies bedeutet nicht, ändern Sie die Tabelle in der Höhe, es ändert sich nur einige Variablen, die zuvor zugewiesen wurde, den Wert der alten Tabelle Inhalt Höhe. Nirgends in deinem code gehst du eigentlich alles tun, um ändern Sie die Tisch-Höhe.
Einer Weise zu ändern, die Tabelle Höhe direkt zugewiesen, einen komplett neuen Rahmen mit den Werten aus dem alten Rahmen, mit Ausnahme der frame in der Höhe, die Sie berechnen, wie du willst.
Versuchen, so etwas wie dieses (hinzufügen, was andere Logik, die Sie brauchen):
Gibt es einen workaround machen kann, wie es scheint, ändert sich die Höhe nach der Anzahl der Zellen.
set tableview Höhe, um einen richtigen Wert beim init.
set tableview Hintergrundfarbe weiß ist transparent.
set tableFooterView.
Unten ist das Ergebnis, es gibt zwei Tabellen in der img. Ich habe die transparent für die Vorder-tableview -, img-Links gesetzt, die Hintergrundfarbe auf weiß, rechts weiß-transparent.
----------------------vs----------------