2013-10-11 38 views
2

我創建了一個帶有UIView的自定義XIB文件,我想在UITableView中將其顯示爲部分標題的視圖。我正確實現所需的委託方法,作爲當然:從XIB加載的UITableView Sectionheader有時顯示不正確

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection: 
    (NSInteger)section 
{ 
    if (tableView == self.messageTableView) { 
     TableViewHeaderView *header = [[[NSBundle mainBundle] 
     loadNibNamed:@"TableViewHeaderView" owner:self options:nil] lastObject]; 

     [header.titleLabel setText:@"A String"]; 
     [header.addressLabel setText:@"Another String"]; 

     [header sizeToFit]; //I tried it with and without this line, 
          // does not seem to help 
     return header; 
    } 
    return nil; 
} 

由此,TableViewHeaderView類是UIView一個子類。

一切似乎工作得很好,我其實也在一些其他項目中使用這種方法,一切似乎都很好。不過,我遇到了一個相當奇怪和隨機的錯誤:運行應用程序並玩弄Tableview的數據,有些Sectionheader-Views有時顯示不正確,如下面的屏幕。由於我在這個論壇的新帳戶,我無法直接將圖片粘貼到這篇文章中。但是你可以使用,而不是鏈接(抱歉的是):

http://i.stack.imgur.com/JSeVz.png

UITableView在這個例子中八個部分。正如你可以清楚地看到sectionheader-views「Sending 3,4,5」完全錯位。他們堅持自己的位置,並在滾動tableview時一起移動。但是,當您向下滾動tableview時,它們會在正確的位置再次出現。順便說一句:我沒有在這個項目中使用AutoLayout,這個視圖有一個正確的高度,對應於heightForHeaderInSection:委託方法,以及與底層tableview本身相同的寬度。該HeaderView的自動調整大小以及潛在的UITableView設置爲:

http://i.stack.imgur.com/Ms0ZC.png

重裝tableview中也沒有幫助。

有沒有人有一個想法那裏有什麼問題?我沒有絲毫的線索。或者,這種使用自定義視圖的方法有點陳舊嗎?

感謝您的幫助!

+0

我會嘗試在該委託方法中放置斷點並檢查該標題視圖的框架。 –

+0

好吧,我會試一試,但正如前面提到的,錯誤發生得非常隨機。可能會有一點點廣泛 – croX

回答

0

我想我想通了,但它是一個相當個人的錯誤。

在有關UITableView對象調用reloadSections:withRowAnimation:方法時,在某些情況下發生錯誤。使用reloadData解決了這個問題。

錯誤本身很難解釋,因爲這意味着解釋了有關應用程序實現的很大一部分。無論如何,我認爲這是由於在短時間內執行了很多結果性的reloadSections:withRowAnimation:reloadData方法調用混合造成的。當通過UDP-Socket接收到新數據時,我的應用程序對reloadSections:withRowAnimation:方法進行了幾次異步調用,同時用戶手動執行tableview刷新(在tableview上使用過濾器時 - 視圖底部的按鈕用於此),這可能實際上會導致一個問題。

我認爲一些已經創建的Sectionheader-views對象可能沒有被清理,以至於它們仍然卡在超級視圖中。我不確定這是否是正確的解釋,但問題至少已修復:)

相關問題