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 留出余量?