UITableView im Storyboard aktualisiert die Inhaltsgröße bei Rotation nicht

8

Ich arbeite an einem Projekt für iOS 6, das Storyboards und das automatische Layout unterstützt. Im Storyboard gibt es viele Orte, an denen eine UITableView als Unteransicht einer View-Controller-Ansicht hinzugefügt wird. Diese Tabellenansicht verwendet Prototypzellen aus dem Storyboard.

Das Problem besteht darin, dass wenn der Ansichts-Controller anfänglich im Querformat geladen wird und das Gerät dann in das Hochformat gedreht wird, die Tabellenansicht sowohl vertikal als auch horizontal zu scrollen beginnt. Die Tabellenansichtszellen werden mit den richtigen Dimensionen gezeichnet, aber rechts ist ein zusätzlicher Leerraum vorhanden.

Es scheint so zu sein, dass der Rahmen und die Grenzen der Tabellenansicht bei der Drehung auf die korrekte Größe aktualisiert werden, die Inhaltsgröße der Tabelle jedoch nicht. Unabhängig von einer Änderung der Aktualisierungsrotation bleibt die Inhaltsgröße gleich.

Das Problem tritt nicht auf, wenn programmgesteuerte Tabellenansichtszellen verwendet werden. Ein paar grelle Arbeitsumgebungen, die ich gefunden habe, 1.) Aufrufen von reloadData oder reloadRowsAtIndexPaths: withRowAnimation: 2.) Manuelles Festlegen der Eigenschaft contentSize.

Beide scheinen weniger als ideal.

Ich habe das hinzugefügt Link zu einem toten einfachen Beispielprojekt , das dieses Problem veranschaulicht. Die einzigen Änderungen betreffen die Implementierung des Storyboards und der Hauptansicht-Controller.

Vor der Drehung Nach der Drehung

    
atommclain 21.09.2012, 23:14
quelle

7 Antworten

6

Ich habe das gleiche Problem - scheint keine dokumentierte Antwort dazu zu finden. Ich habe die UITableView contentSize manuell wie folgt modifiziert:

%Vor%     
alexandria122 28.11.2012 19:41
quelle
1

Ich bin heute auf dieses Problem gestoßen und habe einen Fehlerbericht mit Apple eingereicht.

Wird angezeigt, dass bei Verwendung einer benutzerdefinierten Zelle mit einem Benutzeroberflächenelement AND autoLayout die Inhaltsgröße von UIScrollView Probleme aufweist.

Wenn Sie alle UI-Elemente entfernen, ODER autoLayout deaktivieren ODER eine Factory-Zelle (einfach, usw.) verwenden, funktioniert alles einwandfrei.

    
Ron_L 06.03.2013 03:04
quelle
1

Ich hatte das gleiche Problem ... Ich fand diesen Link. Als ich versuchte, dies zu implementieren, fand ich nicht die Auto-Sizing-Attribute für meine Ansicht, dann klickte ich auf Master View Controller und dann klickte auf File Inspector und deaktiviere Use Autolayout und gehe dann zu Attributes inspector auto-resizing sollte sein Dort können Sie dann die Attribute ändern, wie Sie es wollen. Ich bin sicher, dass Sie es geschafft haben, dies herauszufinden, aber ich hoffe, dass dies jemand anderem helfen wird ...:)

    
AL̲̳I 09.12.2013 14:31
quelle
0
  

Wird angezeigt, dass bei Verwendung einer benutzerdefinierten Zelle mit einem Benutzeroberflächenelement AND autoLayout die Inhaltsgröße von UIScrollView Probleme aufweist.

Ich musste AutoLayout für meine benutzerdefinierten UITableViewCells deaktivieren, um bei der Aktualisierung der Daten nach unten scrollen zu können und dann [self.tableView reloadData].

Wenn AutoLayout aktiviert war, wurde die TableView.contentSize aktualisiert, aber ich konnte immer noch nicht nach unten scrollen, wenn ich das Gerät nicht rotierte.

    
user901500 22.08.2013 05:37
quelle
0

Ich fand folgendes für mich:

%Vor%

Beachten Sie den Async-Versand: Wenn diese Zeile synchron ausgeführt würde, würde die Änderung von contentSize einen weiteren Layout-Durchlauf auslösen, bevor der aktuelle abgeschlossen wäre. Dies löst eine Ausnahme aus:

  

Automatisches Layout ist nach dem Senden von -viewDidLayoutSubviews an die   Ansicht Controller.

    
user3099609 28.07.2014 08:32
quelle
0

Die Verwendung von Constraints hat mir geholfen. Da Sie Storyboards verwenden, ist es sehr einfach Constraint-Werte für alle Edges einzustellen, so dass UITableView immer den gesamten ViewController füllt (natürlich, wenn UITableView den gesamten ViewController füllt), unabhängig von der Geräteausrichtung.

    
jefimijana 09.01.2016 17:14
quelle
-1

Gleiches Problem, das ich in meinem Projekt behoben habe. Ich denke, das ist ein Fehler im Storyboard.

Dann habe ich es durch manuelles Codieren in der Methode willAutorotate gelöst, indem ich

eingestellt habe %Vor%

Hoffe, das wird auch für euch funktionieren.

Wenn Sie eine Apple-Dokumentation zu diesem Thema finden, dann aktualisieren Sie mich bitte ebenfalls. Bis dahin können Sie die gleiche Lösung verwenden.

    
Mrunal 21.06.2013 04:55
quelle