2014-12-02 100 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) 
) 
相關問題