Установите центр UIButton программно-SWIFT

у меня есть UIButton внутри UIView мой UIButton имеет ограничения, которые я устанавливаю в раскадровке. Теперь я хочу установить центр UIButton в центре UIView. Как я это сделаю программно?

4 ответов


попробовать .center свойства

myButton.center = self.view.center

вы также можете указать x и y Если вам нужно.

myButton.center.x = self.view.center.x // for horizontal
myButton.center.y = self.view.center.y // for vertical

этот подход использует использование nslayoutconstraint где self.cenBut-это IBoutlet для вашей кнопки.

func setupConstraints() {
    let centerX = NSLayoutConstraint(item: self.cenBut, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
    let centerY = NSLayoutConstraint(item: self.cenBut, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
    let height = NSLayoutConstraint(item: self.cenBut, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 22)
    self.cenBut.translatesAutoresizingMaskIntoConstraints = false
    self.view.addConstraints([centerX, centerY, height])
}

в viewDidLoad ()

self.view.removeConstraints(self.view.constraints)
self.setupConstraints()

Я должен

yourButton.setCenter(self.view.center);

но имейте в виду, что если вы программно установите фрейм представления, ваши ограничения макета могут работать не так, как предполагалось.


поскольку вы используете ограничения, вы не сможете установить центр, поэтому вам нужно использовать ограничения для установки центра:

    let centerYCon = NSLayoutConstraint(item: labelMessage,
        attribute: .CenterY,
        relatedBy: .Equal,
        toItem: contentView,
        attribute: .CenterY,
        multiplier: 1.0,
        constant: 0.0);
    contentView.addConstraint(centerYCon);


    let centerXCon = NSLayoutConstraint(item: labelMessage,
        attribute: .CenterX,
        relatedBy: .Equal,
        toItem: contentView,
        attribute: .CenterX,
        multiplier: 1.0,
        constant: 0.0);
    contentView.addConstraint(centerXCon);

Я предполагаю, что вы знаете, что означает "программно" с ограничениями автозапуска. Если вы действительно используете autolayout, вы должны установить свойства кнопки для setTranslatesAutoresizingMaskIntoconstraints в false.