【问题标题】:Setting corner radius hides UIView设置圆角半径隐藏 UIView
【发布时间】:2017-10-01 14:28:26
【问题描述】:

我创建了这个扩展来快速为任何UIView 添加圆角:

extension UIView {
    func setCorners(corners: UIRectCorner, radius: CGFloat) {
        print(self.frame) //-> (359.0, 0.0, 306.0, 37.0)
        let maskPath = UIBezierPath(roundedRect: self.frame, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: 0.0))
        let maskLayer = CAShapeLayer()
        maskLayer.path = maskPath.cgPath
        self.layer.mask = maskLayer
        print(self.frame) //-> (359.0, 0.0, 306.0, 37.0)
    }
}

我用来创建视图和圆角的代码:

let view = UIView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 100, height: 40))) //I reposition the view later
view.setCorners(corners: [.bottomLeft, .bottomRight], radius: 8)

注释掉setCorners(corners:radius:) 时,视图会出现,否则它会保持隐藏状态。

知道为什么会这样吗?

【问题讨论】:

  • 我不确定高度为零的角半径是多少。拐角半径应该有一个高度和宽度......通常(对于圆角)它将具有相同的宽度和高度。如果将圆角半径更改为方形会发生什么?
  • 仍然消失...就像,它甚至根本没有出现。

标签: ios swift uiview rounded-corners


【解决方案1】:

看来,您需要在 UIBezierPath(roundedRect: self.frame, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: 0.0)) 中使用 self.bounds 而不是 self.frame

【讨论】:

  • 我实际上更喜欢这个,因为它更短。谢谢!
【解决方案2】:

你屏蔽了错误的视图区域,试试这个:

let maskPath = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height), byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: 0.0))

【讨论】:

  • 就是这样。谢谢!
  • 或者只使用 self.bounds 而不是 self.frame
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多