我试图通过超级视图中的按钮来集中我的子视图。所以我希望子视图的中心成为超级视图的中心。我尝试使用以下代码:
override func viewDidLoad() {
self.view.backgroundColor = UIColor.redColor()
var menuView = UIView()
var newPlayButton = UIButton()
//var newPlayImage = UIImage(named: "new_game_button_5cs")
var newPlayImageView = UIImageView(image: UIImage(named: "new_game_button_5cs"))
newPlayButton.frame = CGRectMake(0, 0, newPlayImageView.frame.width, newPlayImageView.frame.height)
newPlayButton.setImage(newPlayImage, forState: .Normal)
newPlayButton.backgroundColor = UIColor.whiteColor()
menuView.backgroundColor = UIColor.whiteColor()
menuView.addSubview(newPlayButton)
menuView.addConstraint(
NSLayoutConstraint(item: self.view,
attribute: .CenterX,
relatedBy: .Equal,
toItem: menuView,
attribute: .CenterX,
multiplier: 1, constant: 0)
)
}
不幸的是,当我尝试运行它时程序会中断。 (线程1:信号SIGABRT)
答案 0 :(得分:2)
您的代码会触发断言:
添加到视图时,约束的项必须是后代 该视图(或视图本身)。
这意味着您必须在添加约束之前将menuView
作为子视图添加到self.view
。您还应该将约束添加到self.view
,而不是menuView
。最后但同样重要的是,删除通过调用menuView
或autolayout隐式添加到setTranslatesAutoresizingMaskIntoConstraints(false)
的自动调整大小掩码约束会抱怨冲突的约束。
menuView.addSubview(newPlayButton)
menuView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(menuView)
self.view.addConstraint(
NSLayoutConstraint(item: self.view,
attribute: .CenterX,
relatedBy: .Equal,
toItem: menuView,
attribute: .CenterX,
multiplier: 1, constant: 0)
)