我使用以下代码向视图添加叠加视图:
UIView *overlayView = [[UIView alloc] init];
overlayView.backgroundColor = [UIColor redColor];
[self.view addSubview:overlayView];
overlayView.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *views = NSDictionaryOfVariableBindings(overlayView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[overlayView]|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[overlayView]|" options:0 metrics:nil views:views]];
如果我将此代码放在viewDidLoad
的{{1}}方法中,则可以正常使用。但是,如果我在UIViewController
中执行相同操作,则叠加视图将获得零帧。
我已经检查了视图,我可以正确添加约束并且它们是活动的。但是出于某种原因,他们似乎被忽略了。
我没有收到任何错误或警告。
我在这里缺少什么?
PS:我知道我可以用UITableViewController
作为帧来实例化叠加视图,并且它可以工作。但是,我需要使用autolayout。
答案 0 :(得分:1)
怀疑是因为UITableView是一个UIScrollView,在处理建立自己的边界系统的视图(例如滚动视图或表格视图)时,自动布局有一些注意事项。
在叠加视图上设置的约束使得它被约束到滚动视图的顶部,右侧,底部和左侧边缘,因此被约束到滚动视图的内容区域而不是滚动视图的框架。
请参阅 https://developer.apple.com/library/ios/technotes/tn2154/_index.html 和Auto Layout Guide: Working with Scroll Views:
滚动视图的边缘或边距与其之间的约束 内容附加到滚动视图的内容区域。
而不是将叠加视图限制到内容区域,而是将其约束到滚动视图的框架。根据上面的参考文献,这可以通过将叠加视图的宽度/高度约束到滚动视图,或者通过将叠加视图约束到滚动视图外部的视图来完成。