我的NSLayoutConstraint遇到了一个奇怪的问题。
我最近将我的iPhone更新到8.3并使用最新的Xcode。
该应用程序在iOS 8.3上崩溃,断点指向我:
self.triangleTopConstraint = [NSLayoutConstraint constraintWithItem:self.triangle
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0];
[self addConstraint:self.triangleTopConstraint];
这在iOS 8.3之前是有效的。
但是,我在这里阅读了此页面:
https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/#//apple_ref/c/tdef/NSLayoutAttribute
它说当关系没有第二视图时使用NSLayoutAttributeNotAnAttribute
。所以我把它改成这样:
self.triangleTopConstraint = [NSLayoutConstraint constraintWithItem:self.triangle
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:0.0];
[self addConstraint:self.triangleTopConstraint];
但是该应用程序在iOS 8.3上仍然崩溃。
我错过了什么吗?
您可以设置绝对高度或宽度值,在这种情况下,您将使用 nil
toItem
和 NSLayoutAttributeNotAnAttribute
的第二个attribute
; 但不能设置绝对顶部。您必须设置相对于其他内容的顶部 - 例如,相对于超级视图的顶部(它不必是超级视图的顶部,这只是一个特别常见的事情,所以我使用它作为示例)。