Xcode 8 – 删除了一些button边框

我只是将我的Xcode ver从7.3更新到8.0,一些button边框消失了。

代码看起来很好,所以我真的不知道这些图层发生了什么。 顺便说一句 – 在其他一些控制器,我可以看到图层的边界。

self.button.layer.borderColor = borderColor.CGColor; self.button.layer.borderWidth = 2; self.button.layer.cornerRadius = CGRectGetHeight(self.button.frame) / 2; 

之前:(图像只是例如 – 实时边界看起来不同)

之前:

现在:

现在:

原因是XCode 8引入了一种放大Storyboard的新方法。

在XCode 8之前,在视图控制器生命周期中,viewDidLoad(或属性didSet )中的frames是未知的。 你必须等到viewDidLayoutSubviews(这是Autolayout完成应用约束来确定主视图中每个子视图的框架的时候,但是之前的bounds是可以访问的:它们被设置为故事板中的IBOutlet的大小。

在XCode 8中,事情是不同的:由于他们的新的缩放系统,即使bounds在ViewDidLayoutSubviews(它们可能存在,但是具有诸如1000 x 1000的虚拟值)之前是不正确的。

结论是 :

  • 您可以在viewDidLoad或IBOutlet didSet中使用诸如cornerRadius之类的东西,只要您使用固定值
  • 如果你需要根据bounds来定义你的cornerRadius,那么在viewDidLayoutSubviews中做 ,或者使用NSLayoutConstraints (它们的值是固定的,从Autolayout知道的)
  • 如果您需要在视图中使用cornerRadius(如UITableViewCell或UICollectionViewCell子类),则可以在layoutSubviews (但需要为cornerRadius提供一个固定值或NSLayoutConstraint常量),或者在awakeFromNib (在这种情况下,只要在执行任何frame-or boounds相关的self.layoutIfNeeded之前添加self.layoutIfNeeded ,以强制单元格重新计算其子视图的框架)。

我觉得在这个问题上:

 CGRectGetHeight(self.button.frame) / 2; 

当你设置angular落,我认为高度button没有价值或价值较大的边界将不显示。 你可以尝试改变它

 self.button.layer.cornerRadius = 15; 

如果工作,我认为你可以检查你的逻辑,并设置它时,高度button得到正确的价值。

试试这个,并检查:

 #import <QuartzCore/QuartzCore.h> self.button.layer.borderColor = [UIColor whiteColor].CGColor; self.button.layer.borderWidth = 2; self.button.layer.cornerRadius = 5; // Change this value on your requirement self.button.clipsToBounds = YES; 

要强制计算视图框架,您可以尝试使用layoutIfNeeded。 例如,对于UITableViewCell中的标签:

 override func awakeFromNib() { super.awakeFromNib() self.layoutIfNeeded() self.qualityIndexLabel.makeRound() } 

使用dispatch_after

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.button.layer.borderColor = borderColor.CGColor; self.button.layer.borderWidth = 2; self.button.layer.cornerRadius = CGRectGetHeight(self.button.frame) / 2; }); 

RoundedRect不推荐使用UIButtonTypeSystem来代替。 有关更多信息,请参阅https://developer.apple.com/reference/uikit/uibutton?language=objc