【发布时间】:2014-02-18 01:32:35
【问题描述】:
这似乎应该是一项简单的任务,但是有没有办法以编程方式判断 NSLayoutConstraint 是水平约束还是垂直约束?
我能想到的尝试做出这种改变的唯一方法是调用[constraint description];,然后在结果字符串中搜索"V:" 或"H:"
我想查找此信息的原因是我在prototype 上的UITableViewCell 上设置了两个几乎相同的约束storyboard,唯一的区别是一个描述与superview 的水平距离,以及其他的垂直。在给定从我的服务器返回的某个参数的情况下,我想删除垂直的、以编程方式添加的约束来描述正在添加的新视图。
任何建议都会非常有帮助!
编辑:
我接受了 graymouser 的回答,因为他的解释是一个绝妙的答案,并且是我最终解决描述的方式,但也想感谢 @kongtomorrow,他也在 graymouser 在这里回答我之前通过 twitter 提出了这个答案!感谢您的帮助!
这是我用来查找约束的实际代码:
NSArray *constraints = [bubble constraints];
for (NSLayoutConstraint *constraint in constraints) {
if ([[constraint firstItem] isEqual:messageLabel] && [[constraint secondItem] isEqual:bubble] && [constraint secondAttribute] == NSLayoutAttributeTop) {
[bubble removeConstraint:constraint];
}
}
以上内容匹配约束的 firstItem、secondItem 和 secondAttribute,以合理确定我正在查看正确的约束,然后删除它并成功添加新的约束描述!
【问题讨论】:
标签: ios objective-c uitableview autolayout