2014-02-12 109 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