因此,在編譯XCode 6上的應用程序之後,我注意到只有在iOS 8上運行時纔會出現一個奇怪的錯誤:UITableView
在更新其框架後採用錯誤的內部尺寸。iOS 8 UITableView旋轉缺陷
現在我將嘗試解釋確切的情況: 我們有一個UITableView
在它的側面旋轉,基本上是水平的UITableView
。它發生在tableView.transform = CGAffineTransformMakeRotation(-M_PI/2);
。 現在設置變換後,然後設置其框架 - 一切都很好。 但是,當然系統在大多數情況下會向父級發送另一個幀更改,因爲它需要將父級設置爲實際大小,而不是XIB大小或任何初始化大小。那一刻 - 當我重新展示子視圖,包括表格視圖時,一切都出錯了。 實際上,表格視圖的框架只是設置爲包含視圖的bounds
,但隨後是內部滾動視圖(在iOS 8中UITableView
內部有另一個UIScrollView
,稱爲UITableViewWrapperView
。由於UITableView
本身就是UIScrollView
,弄清楚爲什麼他們需要另一個......)需要一個「高度」,它等於父寬度。而「高度」其實就是width
屬性,只能旋轉。
現在,我們可以很容易地估計他們有一個錯誤與有關內UIScrollView
的寬度父UITableView
,這有可能是通過讀取.frame.size.width
代替.bounds.size.width
的實際寬度。 但奇怪的是,當調查UITableView
的子視圖的框架 - 它們似乎都很好!所以一定是在某處出現問題。因爲單元格的「高度」是320而不是568,而單元格的「寬度」很好,設置爲320.
我會很高興聽到其他遇到此問題的人(或來自Apple),但我終於找到了解決方案,並在此處發佈了該問題,以供將來爲我和其他人員參考。
有趣的是,這適用於我的模擬器,但不適用於實際的iPad – canton7 2014-10-20 10:36:20
它適用於我 - 那麼當您在iPad上工作時,您可能會採取不同的做法嗎?也許是不同的方向?或不同的iOS版本? – 2014-10-20 12:50:29
原來有另一個細節。在運行粘貼到答案中的代碼之前,不得設置tableView的框架。我設置tableView.frame = self.bounds,然後調用您的解決方法代碼(CGRect rotatedFrame = tableView.frame;等)。這會導致SIM卡正常工作,但這是一個展示相同問題的真實設備。 – canton7 2014-10-20 16:01:55