使用Storyboard掩盖UIView并给出圆角?


Answers:


264

是的,我经常使用它,但是这样的问题已经被回答了很多次。

但是无论如何在Interface Builder中。您需要像这样添加用户定义的运行时属性:

layer.masksToBounds Boolean YES
layer.cornerRadius Number {View's Width/2}

在此处输入图片说明

并启用

Clips subviews

在此处输入图片说明

结果:

在此处输入图片说明


在哪里可以添加用户定义的运行时属性?
Henson Fang 2015年

正如我在第一个图像选择视图中显示的那样,然后在右窗格中选择第三个图标用户定义的运行时属性单击下面的项目以添加键路径,类型,值
Woraphot Chokratanasombat

1
您可以动态设置边界半径,使其始终为宽度的50%,还是需要为静态整数?
Crashalot 2015年

1
据我所知,仅固定值。
Woraphot Chokratanasombat 2015年

1
仅供参考,如果您像我一样来到这里,则认为这可以在LaunchScreen.storyboard上使用,但不能。您将得到: Error: Launch screens may not use user defined runtime attributes. 如果您需要在LaunchScreen上显示圆形图像,您将无法使用。
Code Knox

22

您可以使用用户定义的属性在情节提要中执行此操作。选择要四舍五入的视图,然后打开其Identity Inspector。在“ 用户定义的运行时属性”部分中,添加以下两个条目:

  • 关键路径:layer.cornerRadius,类型:数字,值:(无论您想要的半径)
  • 关键路径:layer.masksToBounds,类型:布尔值,值:已选中

您可能必须导入QuartzKit视图的相应类文件(如果有的话),但是我发誓我不这样做就可以使它工作。您的结果可能会有所不同。

编辑:动态半径的示例

extension UIView {

    /// The ratio (from 0.0 to 1.0, inclusive) of the view's corner radius
    /// to its width. For example, a 50% radius would be specified with
    /// `cornerRadiusRatio = 0.5`.
    @IBDesignable public var cornerRadiusRatio: CGFloat {
        get {
            return layer.cornerRadius / frame.width
        }

        set {
            // Make sure that it's between 0.0 and 1.0. If not, restrict it
            // to that range.
            let normalizedRatio = max(0.0, min(1.0, newValue))
            layer.cornerRadius = frame.width * normalizedRatio
        }
    }

}

我确认这在操场上有效。


1
您可以动态设置边界半径,使其始终为宽度的50%,还是需要为静态整数?
Crashalot 2015年

5
您可以,但只能在代码中。但是,一个有趣的解决方法是在视图的类中添加IBInspectable属性,该属性的数值介于0到100之间,并指示半径应为宽度的百分比。例如,值50表示半径应为宽度的50%。因为它是计算的(未存储的)属性,所以您甚至可以将其添加到UIView的扩展中,以便所有视图都可以具有该属性。
NRitH 2015年

@NRitH,我很想看到类似的东西。您认为可以在此处发布代码吗?
科比·费舍尔

17

选择视图 您还使用StoryBord更改了“角落重用”,“边框宽度”和“边框颜色”

extension UIView {

    @IBInspectable var cornerRadiusV: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderWidthV: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
        }
    }

    @IBInspectable var borderColorV: UIColor? {
        get {
            return UIColor(cgColor: layer.borderColor!)
        }
        set {
            layer.borderColor = newValue?.cgColor
        }
    }
}

3
为什么使用cornerRadiusV而不是cornerRadius?
luhuiya

1
使用情节
提要

完美的表现
Hassan Tareq

0

即使在情节提要中进行了所有更改,Woraphot的答案也对我不起作用。

这为我工作:

layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor

长答案:

UIView / UIButton等的圆角

customUIView.layer.cornerRadius = 10

边框厚度

pcustomUIView.layer.borderWidth = 1

边框颜色

customUIView.layer.borderColor = UIColor.blue.cgColor

这不是试图回答问题,而只是这里其他答案的重复。
shim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.