将前导空间设置为 UIView ,迅速崩溃
Posted
技术标签:
【中文标题】将前导空间设置为 UIView ,迅速崩溃【英文标题】:Set Leading space to UIView , Crashes in swift 【发布时间】:2015-07-13 11:31:51 【问题描述】:我需要修改视图的前导空格。这是我的代码
let advSearchViewAddLeadingConstraint: NSLayoutConstraint = NSLayoutConstraint(
item:advancedSearchView,
attribute:NSLayoutAttribute.Leading,
relatedBy:NSLayoutRelation.Equal,
toItem:self.view,
attribute:NSLayoutAttribute.NotAnAttribute,
multiplier:0,
constant:200)
self.view.addConstraint(advSearchViewAddLeadingConstraint)
通过使用此代码,我正在崩溃
* 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'* +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Unknown layout attribute'
【问题讨论】:
为什么要使用NSLayoutAttribute.NotAnAttribute
和乘数0
,当您必须设置前导空间约束时。
我在情节提要中添加了视图,我添加了前导、尾随、顶部、底部和高度约束。现在在视图控制器中,我需要根据数据动态更改前导空间。当时崩溃了
您是否以编程方式添加了前导、尾随、顶部、底部和高度约束??
不,我已在情节提要中添加。现在我想改变前导空间和高度约束,高度约束工作正常并且前导空间出现问题。
然后将 IBOutlet 添加到情节提要中的主要约束
【参考方案1】:
我会反其道而行之。创建一个包含视图并拖动一个 IBOutlet 用于前导空间约束。然后只需更改常量,它应该会更好。
leadingConstraint.constant = 200
self.view.layoutIfNeeded()
【讨论】:
【参考方案2】:您可能想要NSLayoutAttribute.Leading
而不是NSLayoutAttribute.NotAnAttribute
。如果您提供两个项目,则需要指定每个项目的属性:
let advSearchViewAddLeadingConstraint: NSLayoutConstraint =
NSLayoutConstraint(
item:advancedSearchView,
attribute:NSLayoutAttribute.Leading,
relatedBy:NSLayoutRelation.Equal,
toItem:self.view,
attribute:NSLayoutAttribute.Leading,
multiplier:0,
constant:200)
其他几点说明:
您可以通过以下方式激活约束:advSearchViewAddLeadingConstraint.active = true
在 Swift 中,类型推断可以帮助您处理枚举类型,因此您可以输入 Leading
,而不是输入 NSLayoutAttribute.Leading
。
【讨论】:
以上是关于将前导空间设置为 UIView ,迅速崩溃的主要内容,如果未能解决你的问题,请参考以下文章