Ich habe gerade meinen Xcode von 7.3 auf 8.0 aktualisiert und einige Tastenränder sind verschwunden.
Der Code sieht gut aus, also weiß ich wirklich nicht, was mit den Layern passiert ist. Übrigens - in einigen anderen Controllern kann ich die Ebenengrenzen sehen.
%Vor%vorher: (Das Bild ist nur zum Beispiel - die Ränder sehen in Echtzeit anders aus)
jetzt:
Der Grund ist, dass XCode 8 eine neue Art zum Zoomen in Storyboards einführt.
Vor XCode 8 war im View Controller-Lebenszyklus frames
in viewDidLoad (oder in den Eigenschaften didSet
) nicht bekannt. Sie mussten warten, bis viewDidLayoutSubviews (in diesem Fall hat Autolayout die Einschränkungen angewendet, um die Frames jeder Unteransicht in der Hauptansicht zu bestimmen).
Vorher war bounds
jedoch zugänglich: Sie wurden nur auf die Größe des IBOutlet im Storyboard gesetzt.
In XCode 8 sind die Dinge anders: aufgrund ihres neuen Zoomsystems sind selbst die bounds
vor ViewDidLayoutSubviews nicht korrekt (sie können existieren, aber mit Dummy-Werten wie 1000 x 1000).
Fazit:
bounds
definieren müssen, dann tun Sie dies in viewDidLayoutSubviews oder verwenden Sie NSLayoutConstraints (ihr Wert ist fest und aus Autolayout bekannt) layoutSubviews
tun (aber dann müssen Sie entweder einen festen Wert oder eine NSLayoutConstraint angeben) constant to cornerRadius) oder in awakeFromNib
(fügen Sie in diesem Fall self.layoutIfNeeded
hinzu, bevor Sie Frame- oder Bounding-bezogene Aktionen ausführen, um die Zelle zu zwingen, den Frame ihrer Subviews neu zu berechnen). Ich denke, Problem darin:
%Vor%Wenn Sie eine Ecke setzen, denke ich, dass die Schaltfläche "height" keinen Wert hat oder dass der Wert für einen größeren Rahmen nicht angezeigt wird. Sie können versuchen, es in
zu ändern %Vor%Wenn ich arbeite, denke ich, dass du deine Logik überprüfen und einstellen kannst, wenn die Höhe-Schaltfläche den richtigen Wert erreicht.
Um zu erzwingen, dass der Ansichtsrahmen berechnet wird, können Sie mit layoutIfNeeded versuchen. Zum Beispiel für ein Label in einer UITableViewCell:
%Vor%