我有一些奇怪的错误,我无法找到解决方案。
我使用自动布局的UITableView。 (在所有4个方面与父母对齐)。 如果我旋转设备,它会被正确渲染,但如果我尝试滚动它,请在屏幕左侧滚动onelly。
红色方块是滚动区域。
我假设下一个问题是连接到这个问题,当我尝试将UIView作为subView添加到UITableView时。
如果我添加:
CGRect frame = CGRectMake(0, 200, self.table.frame.size.width, 5);
UIView * mainView = [[UIView alloc]initWithFrame:frame];
mainView.backgroundColor = [UIColor redColor];
[self.table addSubview:mainView];
没问题,但如果我愿意的话:
UIView * mainView = [[UIView alloc]init];
mainView.backgroundColor = [UIColor redColor];
mainView.translatesAutoresizingMaskIntoConstraints = NO;
[self.table addSubview:mainView];
[self.table addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(200)-[mainView(20)]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_table, mainView)]];
[self.table addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mainView]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_table, mainView)]];
得到na错误:
*** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2903.23/UIView.m:8540
答案 0 :(得分:2)
对于Autolayout打开 - (不要设置任何帧 - 它会产生奇怪的行为)
您的Autolayout限制应如下所示:
您的Autolayout已开启
如果您关闭自动布局,则不需要对您的故事或代码进行任何更改
答案 1 :(得分:1)
尝试设置随机的estimatedRowHeight,它似乎可以解决这个问题。它可能是Apple的一个错误。 Swift版本:
class MyTableView: UITableView {
override func layoutSubviews() {
self.estimatedRowHeight = 120
super.layoutSubviews()
}
}
答案 2 :(得分:0)
这里使用
CGRect frame = CGRectMake(0, 200, self.table.bounds.size.width, 5);
取代
CGRect frame = CGRectMake(0, 200, self.table.frame.size.width, 5);
答案 3 :(得分:0)
看起来superview的方向更改不会传递给您的孩子(tableView)。尝试将以下内容放入willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterf aceOrientation duration:(NSTimeInterval)duration
self.tableView.frame = self.view.bounds;
我在容器视图中遇到了类似的问题,当旋转到纵向到横向时,它没有正确滚动。只有一小部分桌子可以滚动。在那之后,一切运作良好。