2011-12-28 106 views
16

我有一個UITableView的一些部分,每個都有自己的標題視圖。 當用戶點擊部分的標題視圖時,該部分的所有行都會摺疊。我做的是,我設置部分的行數爲0,然後調用:UITableView reloadSections/reloadData:標題視圖變爲空

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom]; 

一切正常,除了一兩件事:該段的頭角度的白色空白。當我滾動表格時,表頭再次變得正常。

所以我想這個表的繪製有一些問題。

有趣的是,如果我使用UITableViewRowAnimationFade來代替,那麼即使當我滾動表格時,標題仍然是白色的空白。

當我更新一個部分時,也沒有問題 - 當我更新多個部分時,問題發生。

如果我使用

[self.tableView reloadData] 

代替,然後一切工作正常。

我之所以使用

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom]; 

是因爲我想要的動畫。

用beginUpdates/endupdates包裝不起作用。

回答

1

我發現一個解決方法 - 不是很優雅,但它的工作原理。 除了提供帶有多個節的NSIndexSet之外,我在每個調用中僅調用一個節的for-loop中調用reloadSections。

的樣子:

for (Element *eleSection in self.gruppenKoepfe) { 
     if (eleSection.type.integerValue == qmObjectTypeFormularSpalte || eleSection.type.integerValue == qmObjectTypeFormularZeile) { 
      [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:nCount] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     nCount ++; 
    }  
0

我有一個類似的問題,但我試圖刪除/插入部分,而且我發現,保持指向整個頭視圖(強大的屬性,即不只是一個子視圖)停止它在部分更新期間消失。

例如物業和實例

@property (nonatomic, strong) UIView *headerView;

-(UIView *)headerView { 
    if (!_headerView) { 
    _headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width, 300)]; 
    // add additional view setup, including subviews 
    } 
    return _headerView; 
} 

而且在tableView:(UITableView *)viewForHeaderInSection:(NSInteger)section

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    if (section == theCorrectSection) { 
     return self.headerView; 
    } 
    return nil; 
} 
33

我意識到,這是因爲這個問題被提出很長時間,但我認爲所有下面給出的答案是不正確的。

我有同樣的問題(與其他人的代碼),並且當我意識到代碼沒有正確地重用表頭時會被這篇文章愚弄。標題消失是因爲代碼只提供了一個UIView,而不是UITableViewHeaderFooterView,正確註冊並設置爲重用。

看一看答案在這裏: How to use UITableViewHeaderFooterView?

我的空白頭走了,當我建立了一個可重複使用的標題。

+1

這應該是正確的答案。謝謝! :) – RJiryes 2015-10-20 09:33:16

+0

很好的捕獲 - 現在似乎很明顯...... :) – NSTJ 2016-11-08 23:56:37

+0

在這個問題上沒有接受的答案。哪一個是遵循的? – GeneCode 2017-01-17 04:52:13

0

我有同樣的問題,它不是以上所述。我的問題是我隱藏了第一個標題,並且由於某種原因,在10次重新加載之後,索引2處的標題被設置爲隱藏。當我設置headerView.hidden = false時就可以了。

1

在斯威夫特:

你需要創建一個類,是的UITableViewHeaderFooterView一個子類,登記表視圖。然後在viewForHeaderInSection中,你做了let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as! YourHeaderView,類似於你爲UITableViewCells做的事情。然後返回header

欺騙性的就是函數調用的UIView?一回當它真正需要dequeuedReusableHeaderFooterView或reloadData將導致其消失

+0

您能否提供一段代碼?我一直在努力解決這個問題好幾天了,你是唯一一個暗示這種方法的人(我認爲這是正確的) – 2018-03-10 19:55:21

+0

我忘了說請 – 2018-03-10 19:55:53