我想以编程方式自定义UIButton
。我的代码从这里开始:
class MyButton: UIButton {
override func awakeFromNib() {
super.awakeFromNib()
layer.shadowRadius = 5.0
...
}
}
现在我想为按钮定义一个恒定的宽度和高度,如何在代码中执行它?
答案 0 :(得分:8)
我建议使用autolayout:
class MyButton: UIButton {
override func awakeFromNib() {
super.awakeFromNib()
layer.shadowRadius = 5.0
// autolayout solution
self.translatesAutoresizingMaskIntoConstraints = false
self.widthAnchor.constraint(equalToConstant: 200).isActive = true
self.heightAnchor.constraint(equalToConstant: 35).isActive = true
}
}
答案 1 :(得分:4)
您需要覆盖override init(frame: CGRect)
方法
class MyButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
// Set your code here
let width = 300
let height = 50
self.frame.size = CGSize(width: width, height: height)
backgroundColor = .red
layer.shadowRadius = 5.0
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
答案 2 :(得分:0)
如果您的按钮的情节提要中设置了如下约束,并且您想要更改按钮的宽度,请在下方找到solotuion。
Safe Area.trailing = Button.trailing + 20
Button.leading = Safe Area.leading + 20
Safe Area.bottom = Button.bottom + 20
height = 40
请参阅图片以更好地理解。
要求:
如果#condition 1:将按钮的宽度更改为等于100或任何尺寸。
其他
#condition 2:保持宽度不变(根据给定的限制)
要处理此问题,请首先为该按钮创建前约束和后约束的IBOutlet。
然后将其设置为非活动状态。并为按钮添加宽度锚点。必须将其设置为非活动状态,因为两者不能同时工作,因此请小心。
@IBOutlet weak var btnNextTrailingConstraint: NSLayoutConstraint!
@IBOutlet weak var btnNextLeadingConstraint: NSLayoutConstraint!
if (condition1) {
btnNextLeadingConstraint.isActive = false
btnNextTrailingConstraint.isActive = false
btnNext.widthAnchor.constraint(equalToConstant: 100).isActive = true
}
else {
btnNextLeadingConstraint.isActive = true
btnNextTrailingConstraint.isActive = true
}
答案 3 :(得分:0)
我尝试找到一种方法来创建一个方形按钮框。希望我在这里没有走错地方,但是当我试图找到自己的解决方案时,它就像这样简单:
button.frame.size.width = 200
button.frame.size.height = 200
这当然适用于所有其他视图。