An mehreren Stellen in meiner Anwendung bekomme ich null Rahmengrößen, wo ich einen Rahmen bekommen habe. Dies hat mich besonders betroffen, wenn ich runde Objekte mit einem cornerRadius von size/2
erstellt habe.Xcode 8 legt die Bildgröße unterschiedlich fest. Wie finde ich weitere Details?
Zum Beispiel in Xcode 7 das hat gut funktioniert:
class AvatarUIButton: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
layer.masksToBounds = true
layer.cornerRadius = bounds.size.width/2
}
}
Aber jetzt in Xcode 8 Ich habe dies zu tun:
class AvatarUIButton: UIButton {
override var bounds: CGRect { didSet {
layer.cornerRadius = bounds.size.width/2
}}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.masksToBounds = true
}
}
In diesem Beispiel ist die Veränderung wohl besser/offensichtlich. Ich habe eine andere Situation, die viel weniger isoliert ist mit einem 0 Frame auf TableHeaderView, die nur für xcode 8 ist.
Ich bin auf der Suche nach Release Notes, Mailingliste Diskussion oder ähnliches, die eine Änderung in der Reihenfolge der Bestimmung der Rahmengröße diskutiert damit ich herausfinden kann, was sich geändert hat und wie ich es beheben kann.
ich bin mit dem gleichen Problem. Es ist ein AutoLayout-Problem. In meinem Fall protokollieren Frames als (0, 0, 1000, 1000). Wenn Sie den Eckenradius auf einen festen Wert setzen (nicht berechnet), wird die Ansicht erneut angezeigt. Ohne AutoLayout existiert das Problem nicht. – Tuslareb
Ich hatte ein ähnliches Problem mit einer Unteransicht in einer benutzerdefinierten Tabellenzelle. Die Unteransicht enthielt Einschränkungen für Position und Größe. Bevor die Zelle angezeigt wurde, war der Rahmen für diese Unteransicht {(0,0), (1000,1000)}. Benutzerdefinierte Zeichnung basierend auf diesem Rahmen funktionierte eindeutig nicht. Beim Debuggen und Überprüfen der Ansichten habe ich festgestellt, dass der Frame erst nach dem Rendern der Ansicht korrekt war. Meine Lösung war, '[cell layoutIfNeeded]' direkt nach dem Herausnehmen der Zelle in 'cellForRowAtIndexPath:' hinzuzufügen. Es löste das Problem für mich und ich konnte den Eckenradius woanders berechnen. –
gelernt: ja, Frames haben 1000 oder Null Größe in 'ViewWillAppear' jetzt (abhängig davon, welche xcode Beta Sie haben). Aber in 'viewWillAppear' können Sie' view.layoutIfNeeded() 'aufrufen, um Ihre Frames korrekt zu skalieren. – SimplGy