2013-04-25 117 views
0

我在重新加載表格單元格內的自定義UIViewSBBarChart)時出現問題。我不使用自動佈局,因爲它太難調整它可能存在或不存在的單元的所有組件。我手動計算每個矩形和那個工作。旋轉後錯誤地重新加載

關於旋轉,我試着在表格視圖控制器中執行willRotateToInterfaceOrientation方法,裏面有[self.tableView reloadData]。這將在旋轉後再次生成單元格。精細。

在單元類的內部,我調用[self.barChart setNeedsDisplay]以確保圖表的子視圖將被重新加載,這是可行的。

現在的問題。最初,縱向視圖打開並正確加載。當我旋轉到風景時,這也起作用。當我旋轉回肖像時,條的長度計算正確,但仍然顯示爲橫向。因此,新的矩形爲酒吧有正確的措施,但酒吧顯示太長,部分在屏幕之外。

正確顯示(和居中)框架的相同度量的標籤,所以它應該是條視圖重新加載的問題。

我在做什麼錯?

回答

0

我剛解決了我的問題。我在代碼中發現了三個重大錯誤。

1)我從單元中刪除控件後使用dequeueReusableCellWithIdentifier。這導致缺少控制和奇怪的行爲。現在我每次從筆尖產生一個新的細胞。

2)我正在使用xy我從細胞中去除的對照值。我只是把數字值。

3)我正在使用frame來確定屏幕的寬度。但是,框架不會改變。爲了解決這個問題,我使用了以下線程:How to get orientation-dependent height and width of the screen?

現在,我甚至不需要行[self.barChart setNeedsDisplay],我可以儘可能旋轉設備,控件不再移動。 :)

我仍然不確定我必須調用reloadData來調整佈局,但我還沒有找到更好的解決方案。

所以,最後它的工作原理!非常感謝你的幫助,我希望這篇文章能夠幫助別人。 :)

1

嘗試重新加載您的tableview時則相應地調整檢查[[UIApplication sharedApplication] statusBarOrientation]

。這將給出當前的輪換狀態。

+0

謝謝你的答案,但我想要的是用條形圖填充屏幕的寬度。所以圖表的代碼是'self.barChart.frame = CGRectMake(20,self.barChart.frame.origin.y,self.frame.size.width - 60,self.barChart.frame.size.height);' 。計算工作正常,但矩形仍然太長。我試過'[self.barChart setNeedsDisplayInRect:self.barChart.frame];'沒有幫助。對於標籤,我做'self.myLabel.frame = CGRectMake(self.barChart.frame.origin.x,self.barChart.frame.origin.y,self.barChart.frame.size.width,self.barChart.frame .size.height);'那是有效的。 – Antiohia 2013-04-26 06:30:17