2014-12-02 161 views
1

我试图用超级视图中的按钮来中心我的子视图。所以我希望子视图的中心是超视图的中心。我试图用下面的代码:超级视图中的中心视图

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

添加一个异常断点,看看它崩溃了:https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html – 2014-12-02 10:04:22

回答

2

您的代码触发了一次断言说:

当添加到一个视图,约束的物品必须是 这种看法(或视图本身)的后裔。

这意味着你要作为一个子视图添加约束之前添加menuViewself.view。您还应该将约束添加到self.view,而不是menuView。最后但并非最不重要的一点,请移除通过调用setTranslatesAutoresizingMaskIntoConstraints(false)隐式添加到menuView的自动调整掩码约束,或者自动布局会抱怨冲突约束。

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) 
) 
相关问题