iOS:自定义按钮(UIButton 的子类) - 无法更改边框属性

Posted

技术标签:

【中文标题】iOS:自定义按钮(UIButton 的子类) - 无法更改边框属性【英文标题】:iOS: Custom button (subclass of UIButton) - cannot change border properties 【发布时间】:2018-03-05 15:27:37 【问题描述】:

我想要一个由绿色背景、白色文本和无边框组成的自定义按钮。我创建了继承自 UIButton 的类 ThemedButton。然后我在 awakeFromNib 方法中更改按钮属性。

由于某种原因,更改背景和标题颜色可以正常工作,但操作边框属性(甚至圆角)却不行。我的按钮有绿色背景和白色文字,但也有丑陋的蓝色边框。

我的实现如下。

编辑:对不起,我令人困惑的属性。我还尝试将边框颜色设置为与背景相同以通过这种方式摆脱它。

import UIKit

class ThemedButton: UIButton 

    override func awakeFromNib() 
        super.awakeFromNib()

        // Works
        setTitleColor(UIColor.white, for: .normal)
        layer.backgroundColor = GREEN_COLOR.cgColor

        // Does not work
        layer.borderWidth = 0
        layer.borderColor = GREEN_COLOR.cgColor
        layer.cornerRadius = 5

    


【问题讨论】:

你的borderWidth是0 没有必要继承 UIButton 来拥有它。子类化还有其他原因吗? @MichaelVorontsov 我至少在两个地方需要这个按钮,所以我觉得这比为每个按钮设置属性更干净。 @Filip,绝对不是。这样做你很快就会用无用的类污染你的代码库。 @MichaelVorontsov 那么有什么更好的解决方案呢?据我所知,我无法在 Xcode 设计器中设置边框.. 【参考方案1】:

设置边框的宽度

 layer.borderWidth = 5

这行得通

class ThemedButto22n: UIButton 

   override func awakeFromNib() 
      super.awakeFromNib()


  

 override func layoutSubviews() 
    super.layoutSubviews()
    // Works
    setTitleColor(UIColor.white, for: .normal)
    layer.backgroundColor = UIColor.green.cgColor

    // Does not work
    layer.borderWidth = 5
    layer.borderColor = UIColor.red.cgColor
    layer.cornerRadius = 5





【讨论】:

谢谢,这终于删除了边框,但我的标题也消失了。我只有绿色矩形。 @Filip,我的头衔也消失了。要解决此问题,请在上述实现的 END 处添加对 super.layoutSubviews() 的调用。

以上是关于iOS:自定义按钮(UIButton 的子类) - 无法更改边框属性的主要内容,如果未能解决你的问题,请参考以下文章

IOS 6 - 自定义 UIButton 如何给我的 titleLabel 留出余量?

具有自定义层的 UIButton 的子类不会完全填充相邻视图的空间

iOS 中 UIBUTTON 的操作

如何使自定义 UIButton 变暗

在情节提要上使用 UIButton 子类会使按钮的边框消失

UIbutton 在自定义 UITableViewCell 中释放