2014-10-31 81 views
3

我正在嘗試爲我的tableview使用新的自動大小。林這樣做:在Swift中旋轉設備時iOS8 tableviewcell高度發生變化

tableView.rowHeight = UITableViewAutomaticDimension 

我有一個多-的UILabel在我的UITableViewCell有一些是工作出色的約束;當我在橫向和縱向上輸入tableview時,行的高度是動態的!真棒!

...但是當我旋轉設備時,行得到基本高度(即44)。

我加入此行:

override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) 
{ 
    self.tableView.reloadData() 
} 

而問題就消失了。但是,這是否真的有必要?必須有更好的方法來解決這個問題?


編輯:

我剛剛發現,當我刪除一行在這樣的表視圖出現相同的問題:

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

我失去了一些東西在這裏?爲什麼不開箱即用?再次


編輯:

我現在做的是這樣的:

self.tableView.estimatedRowHeight = 44 
tableView.rowHeight = UITableViewAutomaticDimension 

然後,當我的數據是從API獲取:

self.tableView.reloadData() 
self.tableView.beginUpdates() 
self.tableView.endUpdates() 

這似乎涵蓋所有迄今爲止我已經測試過的情況,但它看起來很詭異!如果沒有開始/結束更新,單元格會在第一次加載時顯示一些非常怪異的高度。 (但是當旋轉裝置時,細胞正確地調整它們的高度。)

這一切似乎都是如此的錯誤。我沒有找到正確覆蓋這些案例的單一指南。

+0

我發現這篇文章是非常有用的,不知道它是否解決了你的特殊問題。但在iOS8中,您不必使用willAnimateRotationToInterfaceOrientation,也不必重新加載數據:http://captechconsulting.com/blog/tyler-tillage/ios-8-tutorial-series-auto-sizing-table-cells – dirkgroten 2014-11-07 12:15:25

+0

嗨,根據您的問題可以請你告訴我你是否在uitableviewcell中使用了自動佈局約束,並且你是否需要根據uilabel中的內容來設置高度,或者是否需要它始終爲44.請同時添加您面對的問題的圖像將對識別你的問題。 – 2014-11-09 11:33:52

回答

0

根據今年的WWDC會議,如果該單元格已經使用Autolayout,那麼它是假設爲您自動調整大小。它會試圖通過調用systemLayoutSizeFittingSize:(CGSize)做到這一點,或者如果你還沒有使用自動佈局,它會嘗試調用sizeThatFits:(CGSize)

類的東西,以確保如果你支持iOS7也就是設置tableView.rowHeighttableView.estimatedRowHeight將導致奇怪的行爲,並且您希望有條件地調用其中一個或另一個,但不能同時調用這兩個,具體取決於應用程序在哪個版本的iOS上運行。

如果您對標籤有特別的問題,您可能還會檢查您是否使用UILabel的新「自動首選最大布局寬度」屬性(如果您處於故事板中, 「屬性」檢查器)並且lines設置爲'0'。有關更多詳細信息,請參見the documentation。另請參閱iOS界面目錄中的「標籤行爲」,瞭解有關混合UILabel的某些行爲並獲得奇怪結果的一些注意事項。

最後,你可能會看到什麼是新加入的rotation methods for size classes發生:

-willTransitionToSize:withTransitionCoordinator: -willTransitionToTraitCollection:withTransitionCoordinator:

3

我有一個類似的問題與在整個搜索欄和的tableView流離失所,倒在非常旋轉的旋轉肖像風景和背部。見式>斯威夫特搜索欄從的tableView的頂部searchController.active後旋轉過程中分離:

Swift searchBar separates from top of tableView after searchController.active during rotation

我粘貼您的覆蓋函數,即:

override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation:  UIInterfaceOrientation, duration: NSTimeInterval) 
{ 
    self.tableView.reloadData() 
} 

viewDidLoad中功能後,我的問題就消失了。不知道爲什麼。格倫蒂斯曼

相關問題