在 Swift 中枚举视图的 NSLayoutConstraints?
Posted
技术标签:
【中文标题】在 Swift 中枚举视图的 NSLayoutConstraints?【英文标题】:Enumerating a view's NSLayoutConstraints in Swift? 【发布时间】:2014-07-30 19:56:05 【问题描述】: [self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop)
if ((constraint.firstItem == view) && (constraint.firstAttribute == NSLayoutAttributeTop))
constraint.constant = -200;
];
在 Objective-C 中,我将能够枚举视图的约束并相应地调整约束,但在 Swift 中,我很难找到等效的方法。
这是我在 swift 中应用代码的尝试:
for (index, value) in enumerate(view.constraints())
var constraint = value as NSLayoutConstraint
if value.firstItem? = view
constraint.constant = -200;
我收到一个编译器错误,指出“Type '[AnyObject!'不符合此代码第一行的协议“序列”。
任何帮助将不胜感激!
【问题讨论】:
您在哪一行收到此错误? @reecon 第一行 -for (index, value) in enumerate(view.constraints())
【参考方案1】:
由于constraints()
返回[AnyObject]!
,这是可选的,因此您需要在使用前解开view.constraints()!
。所以解开它使用下面的代码
for (index, value) in enumerate(view.constraints()!)
var constraint = value as NSLayoutConstraint
if value.firstItem? = view
constraint.constant = -200;
你也不能分配firstItem
,因为它是只读属性。我想你想比较一下。所以使用if value.firstItem! as UIView == self.view
。所以使用`
for (index, value) in enumerate(view.constraints()!)
var constraint = value as NSLayoutConstraint
if value.firstItem! as UIView == self.view
constraint.constant = -200;
【讨论】:
感谢您的回复,在您的代码中,我在if value.firstItem? = view
行收到此编译器错误“无法分配给此表达式的结果”
已编辑答案。我认为您想使用比较` if value.firstItem!作为 UIView == self.view`以上是关于在 Swift 中枚举视图的 NSLayoutConstraints?的主要内容,如果未能解决你的问题,请参考以下文章