Wie kann ich meine Zellen neu zeichnen lassen, nachdem das Gerät gedreht wurde?
Wenn ich auf dem iPhone teste, ist die Standardausrichtung Hochformat, daher sind meine dynamischen Zellen so groß, wie sie sein müssen, wenn das Gerät im Hochformat ist: das bedeutet, wenn ich in Querformat rotiere, ist viel leer Platz in der Zelle. Wenn ich auf dem iPad teste, ist das Gegenteil der Fall. Ich bekomme einen Teil meines Textes abgeschnitten, wenn ich in die Hochformat-Ausrichtung rotiere, da die Standardeinstellung Landscape ist. Ich habe separate Storyboards für beide Geräte, und beide View-Controller sind auf "Orientation: Abgeleitet" eingestellt.
(Porträt) (Landschaft)
Dies ist, was auf dem iPhone passiert - das Stretching-Etikett hat einen dunkelroten Hintergrund, so dass Sie die tatsächliche Größe des Etiketts sehen können. Die Zellenhöhe wird jedoch nicht neu berechnet, und da die unteren Beschriftungen auf den unteren Rand der Zelle beschränkt sind, sind sie ganz unten ganz unten. Wenn ich eine Beschränkung von der Dehnungsmarkierung (die mit dem Hintergrund) zum unteren Rand der Zelle hinzufüge, wird lediglich die Beschriftung wie folgt gestreckt:
(Label ist gestreckt)
Was mir das sagt, ist, dass ich gerade nicht in der Lage bin, die Zelle dazu zu bringen, zu wissen, was die Orientierung ist und neu zu zeichnen, sobald sie sich verändert hat. Hier ist mein heightForRowAtIndexPath
Code, der die Höhe der Zelle berechnet:
Bisher habe ich [self.container reloadData]
ausprobiert, wo Container mein TableView
mit willRotateToInterfaceOrientation
und didRotateToInterfaceOrientation
ist, um es zu drehen. Ich habe auch versucht, es in viewDidLoad zu setzen, um vielleicht zu erkennen und zu laden, wenn die Ansicht im Querformat mit der richtigen Höhe geladen wird, aber das hat auch nicht funktioniert. Für iPhone, egal was ich tue, lädt es die Höhe für Hochformat und aktualisiert nicht bei Rotation.
Ich habe ein paar Fragen gefunden, von denen ich dachte, dass sie helfen könnten, aber ich kann nicht scheinen diese Antwort funktioniert für mich, auch wenn es scheint, dass die gleiche Frage, die ich habe, und dieser scheint sich mehr auf Zellbreite als auf Höhe zu konzentrieren und ich bin mir nicht sicher, dass es auf die gleiche Weise gilt.
Hier ist sogar ein Tutorial, das, wenn ich es auf dem iPhone lief, auch nicht die Größe ändert die TableViewCells bei Rotation.
Dieses Tutorial schien einige Einblicke in sich ändernde Tischhöhen zu haben, also fügte ich das% co_de hinzu % code in mein begin/endUpdates
, denkend das könnte eine Änderung verursachen, aber das hat nicht so gut funktioniert.
Also, wenn jemand irgendwelche Vorschläge hat oder eine Lösung kennt, würde es sehr geschätzt werden, da ich mit diesem hier eine Steinmauer treffe!
Also habe ich mein Problem herausgefunden. Nach diesem Tutorial habe ich herausgefunden, dass ich vermisst wurde.
>Ich musste:
Unterkomme mein Label, das gestreckt wurde, und gib an, dass preferredMaxLayout
der Bildschirmbreite entspricht
In meinem heightForRowAtIndexPath
muss ich der Zelle mitteilen, dass sie die aktuelle Breite des Bildschirms erhalten und aktualisieren soll
Weitere Informationen finden Sie in der Anleitung. Hoffe, diese Frage und Antwort hilft jemandem in der Zukunft, denn das war sehr mühsam.
Es scheint, dass Sie hier einen Wortumbruch machen. Also nach meiner Erfahrung empfehle ich Ihnen:
1) benutze sizeWithFont oder die neuere iOS7 Version mit passendem linebreakmode.
2) Sie können layoutSubview für Ihre "opCell" implementieren, wo Sie die Rahmengröße neu definieren können.
3) Berechnen Sie die Zellenhöhe während der Rotation. Stellen Sie sicher, dass Sie die Breite wie in den neuen tableView Bounds richtig einstellen.
4) Sie können auch geschätzterHeightForRowAtIndexPath für eine schnelle geschätzte Größe für den Tabellenladevorgang implementieren.
Hoffe das hilft !!
Tags und Links objective-c ios autolayout heightforrowatindexpath tableviewcell