2016-11-11 61 views
0

我试图在父视图中心的视图,但预期其不居中不能居中的UIView。这是我的代码,结果的截图。斯威夫特:在上海华与NSLayoutConstraint

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

Sesquatch应用程序崩溃:***终止应用程序,由于未捕获的异常'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() 
    } 
} 

,没有必要对高度和宽度约束

视图控制器接口:

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])