2012-09-21 98 views
8

我正在開發針對iOS 6的項目,該項目利用故事板和自動佈局。在故事板中,有許多地方將UITableView添加爲視圖控制器視圖的子視圖。此表視圖使用故事板中的原型單元格。故事板中的UITableView不更新輪播內容大小

我們遇到的問題是,如果視圖控制器最初以橫向加載,然後設備旋轉到縱向,則表視圖開始垂直和水平滾動。表格視圖單元格以正確的尺寸繪製,但右側有額外的空白區域。

看起來雖然表視圖的框架和邊界正在更新爲旋轉時的正確大小,但表視圖的內容大小並非如此。無論更新輪換是否更改,內容大小保持不變。

如果使用程序化表格視圖單元格,則不會出現問題。 我發現一些花哨的工作,1.)調用reloadData或reloadRowsAtIndexPaths:withRowAnimation:2.)手動設置屬性contentSize。

這兩個看起來都不太理想。

我已經添加了這個 link to a dead simple sample project它演示了這個問題。唯一的改變是故事板和主視圖控制器的實現。

旋轉 Before rotation 前旋轉 After rotation

+0

我很困惑。在你的例子中,它似乎在工作。 – mkral

+0

@mkral在運行Xcode 4.5時它已經破壞了。如果您在橫向上啓動應用程序,然後旋轉到縱向,則表格視圖將在垂直和水平方向上滾動。 – Paul

+0

好的,我很笨。我認爲從縱向到橫向是問題所在。我從未回去。 – mkral

回答

6

我有同樣的問題後 - 不能似乎找到了與此相關的任何記錄答案。我結束了手動修改的UITableView contentSize像你提到:

- (void) viewWillLayoutSubviews 
{ 
    self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.height, self.tableView.contentSize.height); 
} 
+0

我無法爲我的問題做這個工作。在Master-Detail佈局中,我看到了基本相同的問題。我在Detail控件中有一個UIViewController,它包含一個tableview。當我旋轉iPad時,tableview不會調整大小。 –

+0

我正在閱讀Ray Wenderlich的iOS6教程,而自動佈局的東西有關於表格的特定內容。還沒有嘗試過,但它看起來像表的東西可能實際上必須分開設置,然後加載到UIViewController中的容器。 我對此一點也不確定。希望能在今天下午晚些時候到達。如果我發現任何明確的,我會在這裏更新。 –

+0

嘗試使用** - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.height,self.tableView.contentSize.height);} ** –

1

我今天就遇到了這個問題,並與蘋果提交的bug報告。

出現如果您使用具有UI元素AND autoLayout的自定義單元格,則UIScrollView內容大小有問題。

如果你刪除所有UI元素,或關閉autoLayout,或使用工廠單元格(基本等),一切正常。

-1

同樣的問題我糾正了我的項目。 我想這是故事板中的一個錯誤。

然後我就在willAutorotate方法手工編碼通過設置

tableview.contentsize = CGSizeMake(tableview.width, tableview.contentsize.height); 

希望這會爲你工作,以及解決它。

如果您發現任何有關蘋果的文檔,請更新我。直到那時你可以使用相同的解決方案。

+0

哪個鏈接?你想要說什麼? – Mrunal

0

出現這種情況,如果您使用UI元素AND autoLayout的自定義單元格,則UIScrollView內容大小有問題。

我不得不關閉AutoLayout爲我的自定義UITableViewCells能夠滾動到底部更新數據,然後[self.tableView reloadData]。

隨着AutoLayout打開,t​​ableView.contentSize正在更新,但我仍然無法滾動到底部,除非我旋轉設備。

1

我有同樣的問題... 我找到了this鏈接。當我試圖實現這一點,我沒有找到我看來,自動調整大小的屬性,然後我點擊Master View Controller,然後點擊了File Inspector和取消Use Autolayout然後去Attributes inspector自動調整大小應該是有那麼你可以改變屬性如何你想要它。 我相信你必須設法想出解決辦法,但我希望這會幫助別人... :)

0

我發現下面的工作對我來說:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.width, self.tableView.contentSize.height); 
    }); 
} 

通知異步調度:如果該行將被同步執行,那麼contentSize更改將在當前行完成之前觸發另一個佈局過程。這觸發了一個例外:

將-viewDidLayoutSubviews發送到 視圖控制器後仍然需要自動佈局。

0

的用法約束幫了我。由於您使用的是故事板,因此爲所有邊設置約束值非常簡單,因此無論設備方向如何,UITableView都將始終填充整個ViewController(當然,如果UITableView填充整個ViewController)。