2016-06-03 7 views
0

Ich versuche, die Breite eines UIView in einem benutzerdefinierten UITableViewCell zu erhalten, um einige Änderungen an seinem Aussehen vorzunehmen. Ich verwende Auto-Layout, aber die Breite der zurückgegebenen Ansicht ist die, die in der XIB-Datei definiert ist. Dies ist unterschiedlich zu seiner tatsächlichen Breite, sobald das Autolayout die Zelle ausgelegt hat.Korrekte automatische Layoutbreite wird nicht auf iOS 8 zurückgegeben

Mein Code ist in layoutSubviews():

override func layoutSubviews() { 
    super.layoutSubviews() 
    print(backgroundView.frame.width) 
} 

Dies funktioniert in iOS 9, aber nicht in iOS 8. self.setNeedsLayout() und self.layoutIfNeeded() Aufruf hat keine Wirkung. Wo kann ich den Code so verschieben, dass er die richtige Breite anzeigt?

Danke.

+0

Eine schnelle Lösung könnte sein, wenn die Zellenbreite die volle Breite abdeckt, um 'UIScreen.mainScreen(). Bounds.width' zu verwenden, oder ein wenig Berechnung, die das Padding berücksichtigt. – iphonic

+0

@iphonic Es hat einige Polsterung, aber ja das könnte eine Option sein .. Nur wundern, wenn es einen besseren Weg gibt – Tometoyou

+0

Kann sein [dies] (http://stackoverflow.com/questions/26629240/ios-autolayout-frame-size -nicht-set-in-viewdidlayoutsubviews) kann Ihnen helfen. – iphonic

Antwort

0

Ich hatte dieses Problem vorher, und wenn ich mich richtig erinnere, hatte es etwas damit zu tun, dass iOS die tatsächliche Größe erst kannte, nachdem die Ansicht das erste Mal gezeichnet wurde. Wir konnten es aktualisieren, indem wir nach viewDidAppear (wie Sie erwähnt haben, dass es die richtige Größe nach der Aktualisierung ist) aktualisieren, aber das ist nicht gerade die schönste Lösung.

Noch etwas, was Sie versuchen könnten, ist das Hinzufügen von Constraint-Outlets zu der Zelle, die Sie manipulieren, wo immer Sie Ihre Zellen einrichten. Wenn Sie z. B. ein UI-Element in bestimmten Fällen mit einer bestimmten Breite benötigen, aber nicht mit anderen, können Sie eine Breiteneinschränkung hinzufügen, deren Wert Sie ändern. Dadurch können sich Ihre anderen Elemente basierend auf den anderen Einschränkungen in der Ansicht selbst anpassen. Die Einschränkung hier ist, dass Sie vorher die Breite eines Ihrer Elemente kennen müssen.