在我的应用程序的几个地方,我得到零帧大小,我曾经得到一个框架.特别是在通过执行cornerRadius创建圆形对象时,这会影响我size/2.
例如,在Xcode 7中这很好用:
class AvatarUIButton: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
layer.masksToBounds = true
layer.cornerRadius = bounds.size.width / 2
}
}
Run Code Online (Sandbox Code Playgroud)
但现在在Xcode 8中,我必须这样做:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,变化可以说更好/更明显.我有另一种情况,在TableHeaderView上只涉及xcode 8的0帧不太孤立.
我正在寻找发布说明,邮件列表讨论或类似的讨论帧大小确定顺序的变化,以便我可以弄清楚改变了什么以及如何解决它.
在 Xcode 8 中,Apple 说:
Xcode 8 取消了配置视图的功能,而不受每个尺寸类别的框架变化的限制。使用 Xcode 8 编译后,在运行时切换大小类别时,没有约束的视图可能看起来会有所不同。接下来,使用设备栏的约束和自动调整大小蒙版来实现所需的布局。(25894544)
在以前版本的Xcode中,我们习惯在ViewDidLoad上定义设计。但在这里,没有创建不同的元素(也没有创建约束),因此视图是使用情节提要中的大小创建的。
现在,在 Xcode 8 中,我们不能再这样做了。我们需要有约束,因为框架没有初始化(这就是为什么你们中的一些人有这些框架大小值:0、0、1000、1000)。例如,将其放在 ViewDidAppear 中,它将正常工作。但是,您首先会几次看到没有圆角半径的按钮。
所以,你可以做的是使用这个函数(在 Objective C 中)(在你想要的地方,甚至在加载函数中):
[self performSelector:@selector(setCornerToMyButton) withObject:NULL afterDelay:0];
Run Code Online (Sandbox Code Playgroud)
你可以设置你想要的延迟,但即使是 0 也能工作。
并在此函数中更改半径,例如:
- (void) setCornerToMyButton {
//Do what you want...
layer.masksToBounds = true
layer.cornerRadius = bounds.size.width / 2
}
Run Code Online (Sandbox Code Playgroud)
希望对你有帮助。
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |