2016-05-05 38 views
3

我嘗試構建一個talbleview,其中每行可以顯示一個子列表,當它被點擊時。爲了更新數據模型並致電UITableView with self-sizing insertRowsAtIndexPaths changes contentOffset

[self.tableView insertRowsAtIndexPaths:addedIndexPaths withRowAnimation:(UITableViewRowAnimationTop)]; 

動畫發生在行可見時。 添加的單元格在動畫後正確顯示,但動畫tableview有時會向上滾動。特別是在桌面視圖的最後一部分發生這種情況。此外,tableview始終在表格中向上滾動,直到插入單元格上方的單元格頂部可見。

我想在可見動畫期間修復contentoffset。 我試圖設置begin updatesend updates中的上下文偏移量,但這不起作用,因爲動畫會向上滾動,您會看到內容滾動回原位。

我使用自動佈局來使單元格自動調整大小。

如何在插入可見單元格時保持tableview的內容偏移量不變?

+0

你問表視圖當您指定UITableViewRowAnimationTop滾動到添加單元格的頂部。如果你不希望發生這種情況,你需要選擇一個新的行動畫。你可能想要UITableViewRowAnimationNone。所有的選項都記錄在這裏https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/#//apple_ref/c/tdef/UITableViewRowAnimation。 – Dare

+0

我不太確定,但是:可能是因爲您使用的是autoLayout,但您不會在每次動畫後自動調整autoLayout以進行自我調整。如果這是您做錯的地方,請參閱此視頻。希望能幫助到你。 https://www.youtube.com/watch?v=N5Ert6LTruY – Honey

+1

@ asma22我確實使用自動佈局來調整我的單元格大小。我嘗試並稱爲self.tableview layoutIfNeeded內部的開始/結束更新塊,但它並沒有解決問題。你會如何去通知自動佈局? – HasenBaumeister

回答

0

我想出了這個問題。 自我調整大小是根本原因。

不要用自我調整就刪除這些行:

tableView.estimatedRowHeight = 123

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {

+0

進行此更改後,您的單元格是否仍然自動調整大小? – Macondo2Seattle

+0

@ Macondo2Seattle:我通過'systemLayoutSizeFittingSize'來計算單元格的高度。 – anhtu

相關問題