Ich habe ein paar (gruppierte) Tabellen in meiner iPhone-App (nur auf einem Teil des Bildschirms und hinzugefügt, Interface Builder
obwohl nicht untergeordnet UITableViewController
), die 80% der Zeit klein sind und auf den Bildschirm passen. Wenn die Tabelle auf den Bildschirm passt, möchte ich das Scrollen deaktivieren, um sie etwas sauberer zu machen. Wenn die Tabelle jedoch vom Bildschirm verschwindet (wenn später Zeilen hinzugefügt werden), möchte ich das Scrollen wieder aktivieren (da Sie diesen Inhalt sonst nicht sehen können.)
Gibt es eine Möglichkeit, dies zu tun? Ich kann es nicht herausfinden. Ich weiß zu tun:
tableView.scrollEnabled = NO;
Ich bin mir jedoch nicht sicher, wo oder ob ich die Tabellenobjektgröße oder etwas anderes berechnen muss, damit dies funktioniert.
Update : Hier ist die Lösung, die endlich für mich funktioniert hat:
if (table.contentSize.height < table.frame.size.height) {
table.scrollEnabled = NO;
}
else {
table.scrollEnabled = YES;
}
Ich führe diesen Code aus, nachdem ich reloadData
die Tabelle aufgerufen habe, und er berechnet die richtigen Größen und scheint zu funktionieren.
table.frame.size.height
ist die tatsächliche Größe des Objekts (Sie können dies in sehen Interface Builder
), die auf dem Bildschirm angezeigt wird, während table.contentSize.height
die Höhe von: Kopfzeile, Fußzeile und Höhe jeder Zelle zusammenaddiert wird.
quelle
Antworten:
Ich denke du willst setzen
quelle
interface builder
indem Sie Bounce deaktivieren und horizontal / vertikal springen.Mit dieser Funktion können Sie die Anzahl der sichtbaren Zellen überprüfen:
Diese Methode gibt ein Array mit den sichtbaren Zellen zurück, sodass Sie die Anzahl der Objekte in diesem Array zählen und mit der Anzahl der Objekte in Ihrer Tabelle vergleichen können. Wenn dies gleich ist, können Sie das Scrollen deaktivieren, indem Sie:
Wie @Ginny erwähnt hat, könnten wir Probleme mit teilweise sichtbaren Zellen haben, daher funktioniert diese Lösung in diesem Fall besser:
Wenn Sie autoLayout verwenden, erledigen Sie diese Lösung wie folgt:
quelle
if (table.contentSize.height < table.frame.size.height)
>> siehe Bearbeiten im ursprünglichen Beitrag.In Swift:
quelle
Es gibt also mehrere Antworten und erfordert alle Inhalte auf einmal. Daher füge ich diese Antwort hinzu:
Wenn Sie AutoLayout verwenden, sollte dies nur für Sie funktionieren:
tableView.alwaysBounceVertical = false
Finden Sie einfach diese Option und die Option
untick
"Bounce Vertically
".Hier ist die Referenz:
Wenn Sie AutoLayout nicht verwenden:
quelle
Versuche dies
quelle
Sie können das Aktivieren / Deaktivieren von Bounce oder das Scrollen in der Tabellenansicht festlegen, indem Sie diese im Bereich "Bildlaufansicht" auswählen / deaktivieren
quelle
Sie können dies in Ihrem Storyboard bearbeiten (falls Sie eines verwenden). In der Tabellenansicht befindet sich ein Kontrollkästchen mit der Aufschrift "Scrollen aktiviert". Deaktivieren Sie es und Sie sind fertig.
quelle
// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;
quelle
Die Standardhöhe ist 44.0f für eine Tabellenansichtszelle, glaube ich. Sie müssen Ihre Datenquelle in einem Array zur Hand haben? Überprüfen Sie dann einfach, ob
[array count]*44.0f
die Rahmengrenzen überschritten werden, undtableview.scrollEnabled = NO
setzen Sie sie gegebenenfalls auf JA. Tun Sie dies dort, wo Sie die Datenquelle für diese bestimmte Tabellenansicht herausfinden.quelle