ios - UIButton 的 layer.cornerRadius 移除按钮标题的可见性

标签 ios swift xcode uibutton storyboard

我为我的按钮添加了一个自定义类,我在其中设置角半径(为多个 VC 保存一些代码)但是一旦我设置它,我的按钮的标题就会消失。您可以看到我设置了一个按钮标题,在选择自定义类之前它工作正常。

我的按钮的背景是带有 alpha 的灰色。我曾尝试使用 .isOpaque 设置,但没能拿回标题。知道是什么导致了这个问题吗?

@IBDesignable class RoundedButton: UIButton {

    @IBInspectable var cornerRadius: CGFloat = 8

    override func layoutSubviews() {
        layer.cornerRadius = cornerRadius
    }
}

Storyboard

编辑:已解决!谢谢你/僵尸的解释!

最佳答案

标题没有显示,因为它的框架没有更新。

要修复布局,您需要调用 super.layoutSubviews

override func layoutSubviews() {
    super.layoutSubviews()
    layer.cornerRadius = cornerRadius
}

您的方法可能会阻止对变量之外的半径进行任何更新。

这里有一个更好的方法:

@IBDesignable class RoundedButton: UIButton {

    private var defaultCornerRadius: CGFloat = 8

    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }

        set {
            layer.cornerRadius = newValue
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        cornerRadius = defaultCornerRadius
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        cornerRadius = aDecoder.decodeObject(forKey: "cornerRadius") as? CGFloat ?? defaultCornerRadius
    }



    override func encode(with aCoder: NSCoder) {
        super.encode(with: aCoder)

        aCoder.encode(cornerRadius, forKey: "cornerRadius")
    }
}

关于ios - UIButton 的 layer.cornerRadius 移除按钮标题的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352386/

相关文章:

ios - 如何在 Storyboard 中为uilabel设置大于300的字体大小?

ios - 将 iOS 8 文档保存到 iCloud Drive

swift - Swift 中的协议(protocol)向下转型

ios - 当我想在 UICollectionview 中添加一个单元格时,它会出现两个 - Swift 3

xcode - SpriteKit 物理线的主体

iphone - 使用 NSLog 打印 NSString 参数

iphone - UILocalNotification如何实现 "Alarm"?

android - 卸载并重新安装应用程序会导致重复的推送消息 firebase

ios - iBooks 或任何其他应用程序能否查看通过我的 iOS 应用程序下载的 PDF?

objective-c - Facebook分享对话框在iOS中无法正常运行