Установите центр 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.