簡體   English   中英

如何用不同的行數重新加載UITableView節?

[英]How to reload UITableView section with different row count?

這是一個簡單的想法,但是我似乎找不到正確的解決方案。

我有一個包含許多部分的UITableView,包括標題視圖。

我希望能夠隱藏/刪除我所擁有部分中的每個tableview單元,然后使用漂亮的動畫將它們重新加載回去。

我的問題是,節的數量可能與以前不同,並且節中的行數可能與以前不同...

我不能簡單地淡出整個tableview,然后重新加載它,然后使其淡入,因為我需要標題視圖始終可見並隨tableview滾動。

我需要刪除它們,因為隱藏和顯示將是帶有活動指示器的不錯的“淡入淡出”動畫。

只需使用tableView方法

[self.tableView insertSections:(nonnull NSIndexSet *) withRowAnimation:(UITableViewRowAnimation)]
[self.tableView insertRowsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *) withRowAnimation:(UITableViewRowAnimation)]

它們將使您可以動畫化新行/節的插入。 對於刪除,有類似的方法,除了它們稱為“ deleteSections ...”和“ deleteRowsAtIndexPaths ...”。

請注意,插入/刪除后,這些tableView的委托函數將返回當前值:

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { }
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {}

“正確”的意思是:插入/刪除之前的節/行的數量,加上或減去插入/刪除之后的節和行的數量。

您可以使用此:

self.tableView.reloadRows(at: [indexPath], with: .fade)

此處的索引路徑是要重新加載的特定行。 如果要更改行數,則必須更改數據源中的項目數。 或者,您可以更改numberOfRowsInSection返回的值

對於鏈接動畫,您可以使用

let pathsForNewCells = [indexPathOne, indexPathTwo, indexPathThree]

myTableView.beginUpdates()
myTableView.insertRows(at: pathsForNewCells, with: [UITableViewRowAnimation])
myTableView.endUpdates()

因此,根據文檔 ,高度將設置動畫,而無需重新加載單元。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM