2017-07-06 148 views
0

我有一個tableview(樣式 - 分組),其中包含的行數多於可以放入其框架的行數,因此您必須滾動才能看到最後一行。當我刪除最後一行時,tableview將其內容向下滾動,因此新的最後一行位於框架的底部(填充空白空間)。防止在移除最後一個單元格後滾動uitableview

如何防止UITableView在刪除最後一行後滾動?我希望它保留空白區域,不要自動滾動。

我試圖設置內容插入,但它似乎並不妨礙滾動不幸。

編輯:我的去除行代碼:

func removeLastRow() { 
    let indexPath = IndexPath.init(row: self.messages.count - 1, section: 0) 

    self.messages.removeLast() 
    CATransaction.begin() 
    self.tableView.beginUpdates() 
    CATransaction.setCompletionBlock {() -> Void in 
     // do stuff, add new rows 
    } 
    self.tableView.deleteRows(at: [indexPath], with: .left) 
    self.tableView.endUpdates() 
    CATransaction.commit() 
} 
+0

假設你*可以*刪除行,空留空間......你想要什麼未來呢?用戶是否可以將表格向下滾動,然後備份*保留行所在的空白空間?或者你只是想讓它暫時成爲一個空白的空間,當用戶滾動「新的底部行」時,**是最後一行? – DonMag

+0

@DonMag我想保留空的空間。像插頁一樣。我最終將刪除插入並插入另一行。但如果我不這樣做 - 空的空間仍然空空如也。因此,當用戶可以滾動到底部並且「新的最後一行」必須變成「真正的最後」時,沒有複雜的情況。 – iur

+0

也許而不是*刪除*最後一行,*用空白單元格替換它* – DonMag

回答

0

Retreive細胞通過調用tableView:heightForRowAt:和刪除後,在刪除之前的大小,垂直內容的表視圖的偏移手動設置到當前的垂直內容偏移,加上單元格的高度。

let deletedCellHeight = tableView.heightForRowAt(indexPath) 

然後:

tableView.contentOffset.x += deletedCellHeight 
+0

這不幸似乎不適用於動畫。現在,而不是動畫滾動底部,我得到一個抽搐的內容,它仍然抽搐到底部。 – iur

+0

您應該使用.none作爲動畫並實現自定義動畫塊,然後可以使用內容偏移設置來執行該動畫塊。 – the4kman

+0

嗯,所以你建議假的行刪除動畫,同時保持抵消?我希望找到一個更簡單的方法:( – iur

相關問題