我刚刚将 Xcode 版本从 7.3 更新到 8.0,一些按钮边框消失了。
代码看起来很好,所以我真的不知道各层发生了什么。
顺便说一句 - 在其他一些控制器中我可以看到图层边框。
self.button.layer.borderColor = borderColor.CGColor;
self.button.layer.borderWidth = 2;
self.button.layer.cornerRadius = CGRectGetHeight(self.button.frame) / 2;
之前:(该图像仅作为示例 - 边框实时看起来不同)
now:
原因是 XCode 8 引入了一种放大 Storyboard 的新方法。
在 XCode 8 之前,在视图控制器生命周期中,frames
在 viewDidLoad (或属性中)未知didSet
)。您必须等到 viewDidLayoutSubviews(此时自动布局已完成应用约束来确定主视图中每个子视图的框架)。
但bounds
在此之前可以访问:它们只是设置为故事板中 IBOutlet 的大小。
在 XCode 8 中,情况有所不同:由于其新的缩放系统,即使是bounds
在 ViewDidLayoutSubviews 之前不正确(它们可能存在,但具有 1000 x 1000 等虚拟值)。
综上所述 :
- 您可以在viewDidLoad或IBOutlet中使用cornerRadius之类的东西
didSet,只要你使用一个固定值
- 如果您需要根据以下定义您的cornerRadius
bounds
, then 在 viewDidLayoutSubviews 中这样做,或使用NSLayoutConstraints(它们的值是固定的并且可以从自动布局中得知)
- 如果你需要在中使用cornerRadiusviews(如 UITableViewCell 或 UICollectionViewCell 子类),那么您可以在
layoutSubviews
(但是你需要给cornerRadius一个固定值或一个NSLayoutConstraint常量),或者在awakeFromNib
(在这种情况下,只需添加self.layoutIfNeeded
在执行任何与框架或边界相关的操作之前,为了强制单元格重新计算其子视图的框架)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)