如何使用创建的自定义 IBDesignable 类从情节提要中更改按钮的角半径

Posted

技术标签:

【中文标题】如何使用创建的自定义 IBDesignable 类从情节提要中更改按钮的角半径【英文标题】:How to change the cornerRadius of button from storyboard with custom IBDesignable class created 【发布时间】:2017-07-19 13:01:16 【问题描述】:

下面给出的类工作正常

@IBDesignable class iButton : UIButton 

@IBInspectable var cornerRadius : CGFloat = 0.0
    didSet
        layer.cornerRadius = cornerRadius
    

但问题是,当我在 Attribute Inspector 中为尺寸为(宽度:70,高度 70)的按钮设置cornerRadius 值 35 时。我在情节提要上得到了圆形按钮,但是在模拟器上运行它时,它不是圆形的,而是圆角矩形。

我在 xCode 上的设计视图是 iPhone-SE,并在 iPhone-7-plus 模拟器上模拟。

我还通过在 Size Inspector 上设置高度和宽度来启用自动调整大小。

据我所知,角半径应该是宽度的一半。当按钮通过自动调整大小调整大小时,为什么不调整角半径。我该如何解决这个问题?

提前致谢。

【问题讨论】:

给出按钮约束,然后使用它来代替button.layer.cornerRadius = button.frame.width/2 对于圆形按钮会有所帮助,但并非对所有情况都适用@DatForis 【参考方案1】:
import UIKit

@IBDesignable 
class RoundedCornerButton: UIButton 

    override func drawRect(rect: CGRect) 
        self.clipsToBounds = true
    

    @IBInspectable var cornerRadius: CGFloat = 0 
        didSet 
            self.layer.cornerRadius = cornerRadius
        
    

或者你可以查看这个链接这个链接了解更多信息

https://www.youtube.com/watch?v=JQ5i2YKwvJ8

【讨论】:

【参考方案2】:

谢谢你,我得到了答案。

我们还需要缩放cornerRadius。

layer.cornerRadius = cornerRadius * (UIScreen.main.bounds.width/320.0) //320.0 be my width of the screen that i designed on storyboard

【讨论】:

以上是关于如何使用创建的自定义 IBDesignable 类从情节提要中更改按钮的角半径的主要内容,如果未能解决你的问题,请参考以下文章

IBOutlet 在 IBDesignable 类中为零

使用Swift在Xcode 9中不显示IBDesignable UI

如何从 UIBezierPath 创建 IBDesignable 自定义 UIView?

xcode Interface Builder 未更新 IBDesignable 类

如何创建 IBDesignable 自定义视图?

无法将自定义 IBDesignable 类链接到情节提要上的 UIButton