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
可能没有添加。