iOS10 - Corner Radius无法正常使用边框

时间:2016-09-20 07:27:53

标签: ios objective-c ios10

我有一个UIViewController,我将其显示为 UIModalPresentationPopover 。它的角半径设置为10.0,边框宽度设置为1.0。

- (void)viewWillLayoutSubviews {
  [super viewWillLayoutSubviews];     

  self.view.layer.borderWidth = 1.0f;
  self.view.layer.cornerRadius = 10.0f;
  self.view.layer.masksToBounds = YES;
}

它没有沿着角半径显示任何边界,并且它产生了奇怪的效果。它在iOS10之前运行良好。我该怎么做才能解决这个问题?

修改:屏幕截图为 enter image description here

如果我添加2像素边框,那么View中仍然缺少1个像素 enter image description here

3 个答案:

答案 0 :(得分:7)

您的代码很好,但缺少一行,

view.clipsToBounds = true

设置此行并再次运行。

希望这会对你有所帮助。

答案 1 :(得分:4)

XCode8新功能我们无法直接设置cornerRadius的{​​{1}}。

如果您要应用layer cornerRadius,则需要在应用UIView之前添加一行代码。

  

yourButton.layoutIfNeeded()

目标C的例子。

cornerRadius

进入Swift3的示例

[yourButton layoutIfNeeded];
yourButton.layer.cornerRadius = yourButton.frame.size.height/2;
[[yourButton layer] setBorderWidth:2.0f];

答案 2 :(得分:1)

我通过以下代码解决了我的问题

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")){
    self.view.superview.layer.cornerRadius = 15.0f;
}

我确实将视角半径设置为 10.0 ,因此 15.0 superview 不会干涉其子视图的确切值角半径和边框将其显示为模糊或减少1个像素。

编辑:自定义创建的UIViewController,如果动画可能需要在完成动画制作后实现上述代码。