【发布时间】:2019-01-30 01:28:24
【问题描述】:
我不知道自己做错了什么:我正在创建一个占据所有屏幕的 UIView(它已经有约束),然后以编程方式创建一个 UI 图像视图:
_panel = [[UIImageView alloc] initWithImage:[self loadImageForKey:@"registerPanel"]];
_panel.frame = CGRectMake(0, 0, 100, 100);
_panel.exclusiveTouch = YES;
_panel.userInteractionEnabled = YES,
[self.scrollView addSubview:_panel];
问题来了:我正在向我创建的面板添加约束,但它崩溃了(我在 ViewWillAppear 上执行此操作):
NSLayoutConstraint *centreHorizontallyConstraint = [NSLayoutConstraint
constraintWithItem:_panel
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
NSLayoutConstraint *centreVerticalConstraint = [NSLayoutConstraint
constraintWithItem:_panel
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[_panel addConstraint:centreHorizontallyConstraint];
[_panel addConstraint:centreVerticalConstraint];
错误信息: 添加到视图时,约束的项必须是该视图(或视图本身)的后代。如果在组装视图层次结构之前需要解决约束,这将崩溃。中断 -[UIView _viewHierarchyUnpreparedForConstraint:] 进行调试。
【问题讨论】:
-
" 但它崩溃了" 那么当它崩溃时控制台中是否有任何错误消息?究竟是哪一行导致了崩溃?
-
你添加你的scrollView作为self.view的子视图了吗?
-
是的,我做到了。 [self.view addSubview:self.scrollView];
-
在哪里 [_panel setTranslatesAutoresizingMaskIntoConstraints: NO];
-
" 添加到视图时,约束项必须是该视图(或视图本身)的后代" 在此之前检查
_panel.superview == self.view, _panel.superview.superview == self.view` (根据您的代码),或 _panel.superview....superview == self.view` 似乎并非如此。
标签: ios objective-c autolayout constraints