使用autolayout将子视图添加到UITableView不会';不要定格
我使用以下代码将覆盖视图添加到视图中:使用autolayout将子视图添加到UITableView不会';不要定格,uitableview,uiview,uiviewcontroller,autolayout,Uitableview,Uiview,Uiviewcontroller,Autolayout,我使用以下代码将覆盖视图添加到视图中: UIView *overlayView = [[UIView alloc] init]; overlayView.backgroundColor = [UIColor redColor]; [self.view addSubview:overlayView]; overlayView.translatesAutoresizingMaskIntoConstraints = NO; NSDictionary *views = NSDictionaryOfV
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]];
如果我将此代码放在UIViewController
的viewDidLoad
方法中,它工作正常。但是,如果在UITableViewController
中执行相同操作,则覆盖视图将获得零帧
我已经检查了视图,可以确定约束是否正确添加,并且它们处于活动状态。但出于某些原因,他们似乎被忽视了
我没有收到任何错误或警告
我错过了什么
PS:我知道我可以用
self.view.bounds
作为frame实例化覆盖视图,并且它可以工作。但是,我需要使用autolayout。怀疑这是因为UITableView是一个UIScrollView,而autolayout在使用建立自己边界系统的视图(如滚动视图或表格视图)时有一些注意事项
覆盖视图上设置的约束是,它被约束到滚动视图的上、右、下和左边缘,从而约束到滚动视图的内容区域,而不是滚动视图的框架
看
以及:
滚动视图的边或页边距与其边界之间的约束
内容附加到滚动视图的内容区域
与其将覆盖视图约束到内容区域,不如将其约束到滚动视图的框架。根据上述参考,这可以通过将覆盖视图的宽度/高度限制为滚动视图来实现,或者通过将覆盖视图约束到滚动视图之外的视图。怀疑这是因为UITableView是UIScrollView,而auto layout在使用建立自己边界系统的视图(如滚动视图或表视图)时有一些注意事项 覆盖视图上设置的约束是,它被约束到滚动视图的上、右、下和左边缘,从而约束到滚动视图的内容区域,而不是滚动视图的框架 看 以及: 滚动视图的边或页边距与其边界之间的约束 内容附加到滚动视图的内容区域
与其将覆盖视图约束到内容区域,不如将其约束到滚动视图的框架。根据以上参考,这可以通过将覆盖视图的宽度/高度约束到滚动视图,或者将覆盖视图约束到滚动视图之外的视图来实现。是的,我想是这样的。我确实用其他方法解决了这个问题,但我更希望能够使用autolayout。在iOS 11中,您可以使用表视图的frameLayoutGuide属性。是的,我想是这样的。我确实用其他方法解决了这个问题,但我更希望能够使用autolayout。在iOS 11中,您可以使用表视图的frameLayoutGuide属性。