【问题标题】:Applying corner radius to top part of UIView using AutoLayout使用 AutoLayout 将角半径应用于 UIView 的顶部
【发布时间】:2016-11-04 20:18:15
【问题描述】:

我扩展了 UIView 以添加一个 round() 方法以将角半径应用于特定角:

extension UIView {
    func round(corners: UIRectCorner, radius: CGFloat) -> CAShapeLayer {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSizeMake(radius, radius))
        let mask = CAShapeLayer()
        mask.path = path.CGPath
        self.layer.mask = mask

        return mask
    }
}

在一个视图控制器中,我有以下层次结构:

  • 堆栈视图
    • UI 视图

将顶部、前导和尾随的约束设置为 0。
我的问题是,当我(仅)运行 5.5 英寸屏幕时,UIView 并没有像我应用圆角半径时那样一直拉伸:

override func viewDidLayoutSubviews() {
    self.greenview.round([.TopLeft, .TopRight], radius: CGFloat(10))
}

如果我删除此行,它会正常工作。我是不是在正确的地方调用了这个方法?

这是问题的屏幕截图:

【问题讨论】:

  • 在黑暗中拍摄,可能是因为您没有调用viewDidLayoutSubviews 的父实现吗?此外,我认为layoutSubviews 会是一个更好的地方。
  • 是的,在 layoutSubviews 中执行此操作解决了问题。你可以提供这个作为答案,我会接受的。

标签: ios swift autolayout


【解决方案1】:

在调用 super 方法后尝试将其放入 'layoutSubviews' 中。它更适合与边界相关的 UI 更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多