2014-02-12 99 views
2

我有一些奇怪的错误,我找不到解决方案。UITableView调整自动布局旋转

我有UITableView使用自动布局。 (在所有4边对齐父母)。 如果我旋转设备,它会得到正确的渲染,但如果我尝试滚动它在屏幕左侧滚动。

enter image description here

红色广场上滚动区域。

我假设的下一个问题是,当我试图将UIView作为子视图添加到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)]]; 

越来越呐错误:

*** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2903.23/UIView.m:8540 
+0

你可以给你的视图添加不同的颜色,并在表格视图中添加它,看看它如何在横向模式下呈现? – jailani

+0

是的,原来我画的是红色的视图,我只是没有复制那部分代码:D –

+0

添加的视图应该隐藏你的表格视图。我不知道你用的是什么目的。无论如何,你可能打算这么做。但我的建议是,您可以将主视图添加为UITableView的页脚视图。我认为它可以给一个解决方案.. – jailani

回答

2

对于自动布局开启 - (不要设定任何帧 - 它会给怪异的行为)
您的Autolayout约束应该如下:


你的自动布局是,如果您关闭自动布局你不要求做任何类型的变化对

Your Autolayout is turned on


Your constraints should like this

开启你的故事或代码

+0

我知道这一点。请再次阅读问题。我在你贴的时候开启了自动布局,当旋转时,它看起来不错,但是滚动区域不是。 –

0

这里使用

CGRect frame = CGRectMake(0, 200, self.table.bounds.size.width, 5); 

代替

CGRect frame = CGRectMake(0, 200, self.table.frame.size.width, 5); 
+0

我的问题是滚动区域与显示区域不同,使用自动布局。为此,我根本不使用框架。 –

0

看起来没有得到沿着你的孩子(的tableView)通过上海华盈的方向变化。尝试把以下的willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterf aceOrientation时间:

self.tableView.frame = self.view.bounds; 

我是有在旋转为纵向时没有正确地滚动容器视图一个UITableView类似的问题(NSTimeInterval)持续时间景观。桌子上只有一小片条是可滚动的。之后,这一切运作良好。

1

试图设置一个随机estimatedRowHeight,它似乎修复了这个错误。这很可能是Apple的一个漏洞。 Swift版本:

class MyTableView: UITableView { 
    override func layoutSubviews() { 
     self.estimatedRowHeight = 120 
     super.layoutSubviews() 
    } 
} 
+1

你也可以设置一个高度限制,它也会修正它,无论出于何种原因。 – Jyosua