以编程方式设置按钮的宽度和高度

时间:2017-09-07 11:22:09

标签: ios swift swift3 uibutton

我想以编程方式自定义UIButton。我的代码从这里开始:

class MyButton: UIButton {
    override func awakeFromNib() {
        super.awakeFromNib()

        layer.shadowRadius = 5.0
        ...
    }
}

现在我想为按钮定义一个恒定的宽度和高度,如何在代码中执行它?

4 个答案:

答案 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
    

请参阅图片以更好地理解。

enter image description here

要求:

如果#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

这当然适用于所有其他视图。