2016-11-11 11 views
0

親ビューでビューを中央に配置しようとしていますが、期待通りに表示しません。ここで私のコードは結果のスクリーンショットです。Swift:NSLayoutConstraintを使用してSuperviewのUIViewを中央に配置できません

emptyView.translatesAutoresizingMaskIntoConstraints = false 
self.view.addSubview(emptyView) 
let centerXConstraint = NSLayoutConstraint(item: emptyView, attribute: .centerX, relatedBy: .equal, toItem: self.view, attribute: .centerX, multiplier: 1, constant: 0) 
let centerYConstraint = NSLayoutConstraint(item: emptyView, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1, constant: 0) 
self.view.addConstraints([centerXConstraint]) 
self.view.addConstraints([centerYConstraint]) 

Preview

+0

'view.addConstraints'? – sasquatch

+0

アプリがクラッシュする問題を解決しました:***キャッチされていない例外 'NSInternalInconsistencyException'のためアプリを終了しています、理由: '制約のために準備されていないビュー階層を持つレイアウトを設定できません。 –

+0

制約を設定するためにこのコードを書いていますか?この例外は、ビューが完全にレイアウトされておらず、アウトレットが設定されていないため、制約を適用できないことを意味します。 – PGDev

答えて

2

を試してみて、あなたがラベルやボタンや固有の大きさを持っている他のビューを使用している場合は、コード、

import UIKit 

class ViewController: UIViewController 
{ 
    @IBOutlet weak var emptyView: UIView! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     self.emptyView.translatesAutoresizingMaskIntoConstraints = false 
     let centerXConstraint = NSLayoutConstraint(item: emptyView, attribute: .centerX, relatedBy: .equal, toItem: self.view, attribute: .centerX, multiplier: 1, constant: 0) 
     let centerYConstraint = NSLayoutConstraint(item: emptyView, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1, constant: 0) 
     let widthConstraint = NSLayoutConstraint(item: emptyView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100) 
     let heightConstraint = NSLayoutConstraint(item: emptyView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100) 

     self.view.addConstraints([centerXConstraint, centerYConstraint, widthConstraint, heightConstraint]) 
     self.view.layoutIfNeeded() 
    } 
} 

あり、高さと幅の制​​約は不要です

のViewControllerインタフェース:

enter image description here

出力:

enter image description here

0

このコードここ

emptyView.translatesAutoresizingMaskIntoConstraints = false 
let widthConstraint = NSLayoutConstraint(item: emptyView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: emptyView.frame.size.width) 
let heightConstraint = NSLayoutConstraint(item: emptyView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: emptyView.frame.size.height) 
var constraints = NSLayoutConstraint.constraints(
     withVisualFormat: "V:[superview]-(<=1)-[label]", 
     options: NSLayoutFormatOptions.alignAllCenterX, 
     metrics: nil, 
     views: ["superview":view, "label": emptyView]) 

view.addConstraints(constraints) 

// Center vertically 
constraints = NSLayoutConstraint.constraints(
     withVisualFormat: "H:[superview]-(<=1)-[label]", 
     options: NSLayoutFormatOptions.alignAllCenterY, 
     metrics: nil, 
     views: ["superview":view, "label": emptyView]) 

view.addConstraints(constraints) 
view.addConstraints([ widthConstraint, heightConstraint]) 
関連する問題