当我使用AutoLayout技术将子视图添加到表视图时,我的代码崩溃了,这是我的代码:
@interface GNViewController () {
UITableView *_tvResults;
UIView *_view;
}
@end
@implementation GNViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor blueColor];
_tvResults = [UITableView new];
_tvResults.backgroundColor = [UIColor greenColor];
[self.view addSubview:_tvResults];
_view = [UIView new];
_view.backgroundColor = [UIColor redColor];
[_tvResults addSubview:_view];
_tvResults.translatesAutoresizingMaskIntoConstraints = NO;
_view.translatesAutoresizingMaskIntoConstraints = NO;
NSArray *cs = [NSLayoutConstraint constraintsWithVisualFormat:@"|[_tvResults]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tvResults)];
[self.view addConstraints:cs];
cs = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_tvResults]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tvResults)];
[self.view addConstraints:cs];
cs = [NSLayoutConstraint constraintsWithVisualFormat:@"|[_view]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_view)];
[_tvResults addConstraints:cs];
cs = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_view]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_view)];
[_tvResults addConstraints:cs];
}
@end
崩溃消息显示:
2014-03-14 22:45:06.801 asdjasjdasdasd [3758:a0b] *断言失败 - [UITableView layoutSublayersOfLayer:],/ SourceCache / UIKit_Sim / UIKit-2903.2 / UIView.m:8536 2014-03-14 22:45:06.805 asdjasjdasdasd [3758:a0b] * 由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:'执行-layoutSubviews后仍需要自动布局。 UITableView的-layoutSubviews实现需要调用super。'
任何人都请帮助我,提前谢谢!
答案 0 :(得分:3)
问题是您是直接向UITableView 和添加子视图,试图让它参与表视图的约束。这些都是糟糕的想法,第二个特别是导致你的崩溃。没有为这类事情设置表格视图。
如果你能解释一下你实际上要做什么,这将有所帮助。如果你想在桌子视图的顶部放置一些东西以便它覆盖它(虽然你为什么要这样做会击败我),把它作为self.view
的另一个子视图并用限制来固定它self.view
。保留表格视图以适应自己。
编辑:从评论中我发现,当你在没有自动布局的情况下这样做时,这很有用。然后继续做它没有自动布局!问题源于您尝试在表视图内部强制执行自动布局,该视图不使用自动布局而不喜欢它。通过自动布局调整表视图本身的大小/位置没有问题,但在子视图中不使用自动布局。回到你以前的方式,它会像以前一样工作。