2017-03-07 110 views
2

我有點沮喪。我有一個iOS 10項目UITableViewUITableViewAutomaticDimension單元。我正確設置了約束。UITableView cellForRowAt vs willDisplay

起初我映射我的細胞內部

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

,一切工作正常,但後來我讀到一篇文章:https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5#.4rnbc4vyg和感動我的數據映射到

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)

後這我的自動佈局單元停止正常工作。

我的理解,在高度cellForRowAt之後,但之前willDisplay計算,所以當我在willDisplay高度映射已被設置爲我的手機,我需要重新加載它(這是不好的)。

任何人都可以證明/解釋這一點?

UPDATE:

發佈提問後,我發現這篇文章:https://tech.zalando.com/blog/proper-use-of-cellforrowatindexpath-and-willdisplaycell/

+0

您可以將我的回答標記爲答案? –

回答

2

務必設置你的細胞內func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

蘋果文件說,大約cellForRowAt

詢問ce的數據源將插入到表視圖的特定位置。

tableView(_:cellForRowAt:)

另一方面willDisplay可以用於覆蓋之前它被吸引到觀看細胞的某些性質。如果你不確定willDisplay是否在cellForRowAt中完成所有設置,我會建議。

蘋果的醫生說大約willDisplay:

此方法使該委託有機會重寫基於狀態的性質早些時候表視圖設置,如選擇和背景顏色。

更多willDisplay是這裏蘋果的文檔: tableView:willDisplayCell:forRowAtIndexPath:

編輯:讀你所提供的鏈接後 - 我重申,除非你真的有特殊原因設置你的細胞willDisplayCell ,只需在cellForRowAt

相關問題