我正在使用添加视图作为子视图[self.view addSubview:myView]
。这在纵向模式下工作正常。但是,它在风景中根本不起作用。如何以编程方式添加布局约束?
我的视图目前看起来像纵向矩形,我需要它在横向模式下看起来像横向矩形。
我尝试了这段代码来查看代码中的约束是如何工作的,但它总是会导致异常。代码是:
[self.view addSubview:_preView];
NSLayoutConstraint *myConstraint = [NSLayoutConstraint
constraintWithItem:_preView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view.superview
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-239];
[_preView addConstraint:myConstraint];
这总是导致异常。我知道上面的代码只是试图确保预览的底部比主视图的底部高 239px。但这也行不通。
你能帮我整理一下,这样我就可以解决景观问题吗?
更新
产生的异常是:
2013-08-05 16:13:28.889 Sample Code[33553:c07] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to install constraint on view. Does the constraint reference something from outside the subtree of the view? That's illegal. constraint:<NSLayoutConstraint:0x912c430 UIView:0x8561340.bottom == UILayoutContainerView:0x8257340.bottom - 20> view:<UIView: 0x85774e0; frame = (0 0; 320 568); opaque = NO; autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x8577490>>'
*** First throw call stack:
(0x1a04012 0x173be7e 0x1a03deb 0x12ee4a0 0xbb983e 0xbb9a27 0xbb9b76 0xbb9d3b 0xbb9c4d 0x1c0d9 0x11395b3 0x19c3376 0x19c2e06 0x19aaa82 0x19a9f44 0x19a9e1b 0x24027e3 0x2402668 0x67fffc 0x2d3d 0x2c65)
libc++abi.dylib: terminate called throwing an exception
(lldb)
我在添加约束之前添加了子视图,所以我很确定视图是层次结构的。
更新 2
我在 IB 中将父视图的属性设置为“自动调整子视图”。当设备转动但它太窄时,子视图现在转换为横向矩形。我现在需要代码来确保它的宽度正确吗?