【发布时间】:2015-03-03 09:55:26
【问题描述】:
我在情节提要中设置了一个视图控制器。视图控制器的视图包含一个子视图 (UITableView),其父视图的 4 个边都有固定的边缘,实质上是使视图填充其父视图。
我将视图控制器的主视图添加为另一个视图控制器视图的子视图,如下所示:
UIView *overlayView = firstViewController.view;
[overlayView setTranslatesAutoresizingMaskIntoConstraints:NO];
UIView *sourceView = secondViewController.view;
[sourceView addSubview:overlayView];
NSLayoutConstraint *constraint;
constraint = [NSLayoutConstraint constraintWithItem:overlayView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:sourceView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0];
[sourceView addConstraint:constraint];
constraint = [NSLayoutConstraint constraintWithItem:sourceView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:overlayView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:100];
[sourceView addConstraint:constraint];
constraint = [NSLayoutConstraint constraintWithItem:overlayView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:sourceView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
[sourceView addConstraint:constraint];
constraint = [NSLayoutConstraint constraintWithItem:overlayView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:sourceView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
[sourceView addConstraint:constraint];
[sourceView layoutIfNeeded];
我希望从视图的右边缘到其父级的间隙等于 100 像素。
现在奇怪的是,这在 iOS 8 上可以按预期工作,但在 iOS 7 上却不能这样做,并且视图会全屏显示,而忽略了在尾随约束上设置的 100 常量。此外,如果正在添加的视图控制器的视图没有子视图 - 那么它按预期工作。 setTranslatesAutoresizingMaskIntoConstraints: 是否应用于 iOS 7 中视图的所有子视图?这可能是什么原因?
编辑:
问题在于操作系统管理子视图的方式。
当容器视图被设置为视图控制器的view 属性的出口时,事情就不起作用了。但是,如果我将表视图设置为view 属性的出口,它就可以工作。如果有一个子视图的父视图带有固定边缘,然后我向父视图添加其他约束,则会发生一些奇怪的事情。我不明白为什么它在 iOS 8 上运行良好...
编辑 2
问题似乎只发生在trailing 约束中。如果我想修改任何其他约束的常量没有问题?!
【问题讨论】:
标签: ios objective-c autolayout constraints