Ios Swift:Can';在具有NSLayoutConstraint的Superview中t居中UIView

Ios Swift:Can';在具有NSLayoutConstraint的Superview中t居中UIView,ios,swift,nslayoutconstraint,Ios,Swift,Nslayoutconstraint,我正在尝试在父视图中居中视图,但它没有按预期居中。这是我的代码和结果的屏幕截图 emptyView.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(emptyView) let centerXConstraint = NSLayoutConstraint(item: emptyView, attribute: .centerX, relatedBy: .equal, toItem: self.view,

我正在尝试在父视图中居中视图,但它没有按预期居中。这是我的代码和结果的屏幕截图

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

试试这段代码

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])
emptyView.translatesAutoresizingMaskIntoConstraints=false
let widthConstraint=NSLayoutConstraint(项:emptyView,属性:NSLayoutAttribute.width,关联方式:NSLayoutRelation.equal,到项:nil,属性:NSLayoutAttribute.NotAttribute,乘数:1,常数:emptyView.frame.size.width)
let heightConstraint=NSLayoutConstraint(项目:emptyView,属性:NSLayoutAttribute.height,关联方式:NSLayoutRelation.equal,toItem:nil,属性:NSLayoutAttribute.NotAttribute,乘数:1,常数:emptyView.frame.size.height)
var constraints=NSLayoutConstraint.constraints(
使用VisualFormat:“V:[superview]-(尝试以下代码

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])
emptyView.translatesAutoresizingMaskIntoConstraints=false
let widthConstraint=NSLayoutConstraint(项:emptyView,属性:NSLayoutAttribute.width,关联方式:NSLayoutRelation.equal,到项:nil,属性:NSLayoutAttribute.NotAttribute,乘数:1,常数:emptyView.frame.size.width)
let heightConstraint=NSLayoutConstraint(项目:emptyView,属性:NSLayoutAttribute.height,关联方式:NSLayoutRelation.equal,toItem:nil,属性:NSLayoutAttribute.NotAttribute,乘数:1,常数:emptyView.frame.size.height)
var constraints=NSLayoutConstraint.constraints(
VisualFormat:“V:[超级视图](这是代码

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界面:

输出:

这是代码

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界面:

输出:


view.addConstraints
?验证应用程序崩溃原因:**由于未捕获的异常“nsInternalInconConsistencyException”终止应用程序,原因:“无法设置布局,视图层次结构未为约束做好准备。”您在哪里编写此代码来设置约束?此异常意味着视图未完成布局ely和Outlet未设置,因此无法对其应用约束。我想应该是这样的顺序:
emptyView.translatesAutoResizezingmaskintoConstraints=false
view.addSubview(emptyView)
view.addConstraints()
正如@PGDev所建议的,这意味着可能没有添加您的
清空视图。
查看。添加约束
?Sesquatch应用程序崩溃:**由于未捕获的异常“nsinternalinconsistenceexception”终止应用程序,原因是:“无法设置布局,视图层次结构未为约束做好准备。”用于设置约束?此异常意味着视图未完全布局且未设置出口,因此无法对其应用约束。我想应该是这样的顺序:
emptyView.translatesAutoResistinggmaskintoConstraints=false
视图。addSubview(emptyView)
视图。addConstraints()
正如@PGDev所建议的,这意味着您的
emptyView
可能没有添加。