Ich verwende Größenklassen in einer iOS 8-only-App und ich habe eine Ansicht innerhalb einer UITableViewCell
, die eine flexible Breite hat. Seine automatischen Layout-Einschränkungen sind wie folgt definiert:
Wie Sie sehen, variiert die Breite je nach Gerätebreite / Ausrichtung.
Wenn ich den Rahmen in cellForRowAtIndexPath
drucke, sehe ich (180.0, 10.0, 400.0, 60.0) , was eine 400 Breite anzeigt. Aber wenn ich die Ansicht im Simulator messe, ist es nur 175 wide , was dadurch verstärkt wird, dass der Inhalt meiner Ansicht abgeschnitten ist (ich zeichne etwas darin).
Wie kann ich wissen, wann die UITableViewCell
Einschränkungen und Subviews komplett fertig sind, damit ich Dinge in meiner Ansicht neu zeichnen kann?
Aktualisieren
In cellForRowAtIndexPath
Ich mache folgendes um die Zelle zu bekommen:
Rufen Sie cell.contentView.layoutIfNeeded()
auf, um die Inhaltsansichten korrekt anzuzeigen. Während die Zelle selbst die korrekte Größe haben sollte, wenn sie von tableView.dequeueReusableCellWithIdentifier(_, forIndexPath:)
zurückgegeben wird, scheint es, dass die Inhaltsansicht nicht sofort das Layout ausführt, also müssen Sie sie manuell aufrufen, wenn Sie sie zu diesem Zeitpunkt aktuell benötigen.
Sie müssen entweder nach der Breite in viewWillLayoutSubviews
oder viewDidLayoutSubviews
suchen.
Wenn Sie println(self.tableView.frame.width)
in viewDidLoad
, viewWillAppear
, viewDidAppear
, viewWillLayoutSubviews
und viewDidLayoutSubviews
eingeben, können Sie die Breite beim Aufruf jeder Methode sehen.
Tags und Links uitableview ios swift autolayout