Ermitteln der endgültigen Layoutgröße für die Ansicht mit flexibler Breite in UITableViewCell

8

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:

%Vor%     
Clifton Labrum 14.05.2015, 23:07
quelle

3 Antworten

13

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.

    
BJ Homer 15.05.2015, 05:30
quelle
11

Ich habe damit UITableViewCell.layoutSubviews method überschrieben:

%Vor%     
mixel 22.03.2016 14:18
quelle
0

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.

    
bwash70 15.05.2015 01:33
quelle

Tags und Links