Android 到 iOS 的坑 --- 請認真看文檔.

最近開始做 iOS 的項目. 之前的 Android 開發(fā)經(jīng)驗導致有的時候總是有一些思維定勢繞不過來(不認真看文檔), 導致踩了一些不應該踩的坑.

1. UITableView 的 reloadData 的作用

剛開始看到 UITableView 的時候, 第一反應就是這貨不就是一個 ListView. 所以看到 reloadData 這個函數(shù)的時候也沒有細看文檔, 就以為是 notifyDataSetChanged 一樣的作用.

當數(shù)據(jù)變化比較大的時候, 比如刪掉一個, 然后添加了10個之類的. 就直接 reload 了. 結果自然就造成了很多奇怪的現(xiàn)象, 讓我都開始懷疑人生. 后來看到了文檔, 文檔里明確說不能在 beginUpdate 和 endUpdate 之間調(diào)用. 真是死的心的都有了.

文檔的原文:

Call this method to reload all the data that is used to construct the table, including cells, section headers and footers, index arrays, and so on. For efficiency, the table view redisplays only those rows that are visible. It adjusts offsets if the table shrinks as a result of the reload. The table view’s delegate or data source calls this method when it wants the table view to completely reload its data. It should not be called in the methods that insert or delete rows, especially within an animation block implemented with calls to beginUpdates() and endUpdates().

2. 沒有提供準確的 estimate height 導致 TableView 滾動狀態(tài)出錯

iOS 8 后 UITableView 提供了 Cell 的自適應機制. 方法也簡單, 設置 estimatedHeight, 然后把 cellHeight 設成 UITableViewAutomaticDimension 即可.

在 Android 開發(fā)中自適應是一種天然的選擇, 因為 Android 一開就面對各種奇怪尺寸的屏幕. 但是 iOS 設備一開始只有一種尺寸, 每一個設計圖都可以精確到每一個 px. 所以自適應是后期引入的. 雖然沒有具體考古過, 但是我想 UITableView 在設計支出一定也是沒有考慮過自適應高度這一點.

即使在新的機制中, 我們依然要提供 estimatedHeight. 剛開始我以為這個只是一個隨便給的值. 所以即使我的頁面每一個 Cell 的高度都是不一樣. 我依然隨便提供了一個的數(shù)值.

后果當然很嚴重, 當我滾動 TableView 的時候就會出現(xiàn)一些奇怪的跳動. 有時候甚至會觸發(fā)不停的來回滾動. 我的表情是這樣的:

老老實實地滾回去看文檔: Working with Self-Sizing Table View Cells. 里面提到:

Additionally, try to make the estimated row height as accurate as possible. The system calculates items such as the scroll bar heights based on these estimates. The more accurate the estimates, the more seamless the user experience becomes.

人與人的之間的信任都沒有了. 不是說自適應!! accurate 和 estimated 對不上啊!!!

后續(xù)提供了比較精確的 estimated height. 滾動終于正常.

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辛蚊,隨后出現(xiàn)的幾起案子秆撮,更是在濱河造成了極大的恐慌抒寂,老刑警劉巖冯袍,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件移盆,死亡現(xiàn)場離奇詭異惰拱,居然都是意外死亡判没,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門峻仇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來公黑,“玉大人,你說我怎么就攤上這事摄咆》惭粒” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵吭从,是天一觀的道長朝蜘。 經(jīng)常有香客問我,道長涩金,這世上最難降的妖魔是什么谱醇? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任暇仲,我火速辦了婚禮,結果婚禮上副渴,老公的妹妹穿的比我還像新娘奈附。我一直安慰自己,他們只是感情好煮剧,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布斥滤。 她就那樣靜靜地躺著,像睡著了一般勉盅。 火紅的嫁衣襯著肌膚如雪佑颇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天草娜,我揣著相機與錄音挑胸,去河邊找鬼。 笑死宰闰,一個胖子當著我的面吹牛茬贵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播议蟆,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闷沥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咐容?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蚂维,失蹤者是張志新(化名)和其女友劉穎戳粒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虫啥,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡蔚约,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涂籽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苹祟。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖评雌,靈堂內(nèi)的尸體忽然破棺而出树枫,到底是詐尸還是另有隱情,我是刑警寧澤景东,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布砂轻,位于F島的核電站,受9級特大地震影響斤吐,放射性物質(zhì)發(fā)生泄漏搔涝。R本人自食惡果不足惜厨喂,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庄呈。 院中可真熱鬧蜕煌,春花似錦、人聲如沸诬留。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽故响。三九已至傀广,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彩届,已是汗流浹背伪冰。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留樟蠕,地道東北人贮聂。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像寨辩,于是被迫代替她去往敵國和親吓懈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容