【发布时间】:2015-11-20 01:15:29
【问题描述】:
我在UIView 中有一个UIButton,我的UIButton 有我在情节提要中设置的约束。现在,我想将UIButton 的中心设置在UIView 的中心。我将如何以编程方式做到这一点?
【问题讨论】:
我在UIView 中有一个UIButton,我的UIButton 有我在情节提要中设置的约束。现在,我想将UIButton 的中心设置在UIView 的中心。我将如何以编程方式做到这一点?
【问题讨论】:
试试.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
【讨论】:
我应该是
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);
我假设您知道“以编程方式”对自动布局约束意味着什么。如果您真的使用自动布局,那么您必须将按钮的属性设置为 setTranslatesAutoresizingMaskIntoConstraints 为 false。
【讨论】:
这种方法是使用使用 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()
【讨论】:
这可以通过两种方式完成:
myButton.center = view.center //view is your parentView
myButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
【讨论】: