你的下拉重新整理是否「抖」了一下

2022-07-20 07:57:11 字數 1546 閱讀 1048

在進入ios8之後,你有沒有注意到老式的下拉重新整理可能會抖一下, 在下拉鬆開後,scrollview即將回到「重新整理中…」的狀態過程中的時候。如果你又這個問題,那不妨跟隨我來看看怎麼解決這個問題。

我們先來看看在手鬆開之後我們對scrollview做了什麼事情:

scrollviewdidenddragging=>setcontentinset:

為了保證在「loading」的狀態下,下拉重新整理控制項可以展示,我們對contentinset做了修改,增加了inset的top. 那這樣一步操作為什麼會導致scrollview抖動一下呢。

我在scrollviewdidscroll:中打了個斷點,來看看在setcontentinset:之後發生了什麼事情。 我設定的inset.top = 64; 結果發現scrollview的contentoffset發生了這樣的變化:

(0, -64)=>(0, -133)=>(0, -64)

由以上資料可以看出,contentoffset在這個過程中先被向下移動了一段,再回歸正常。 猜測問題原因:

下拉鬆開之後, scrollview本身的 bounce 效果 與 當前設定inset衝突了

知道問題的原因後,我第一思路是避開這個衝突,於是我把 setcontentinset: 的方法非同步呼叫一下:

123

456

dispatch_async(dispatch_get_main_queue(), ^ completion:^(bool finished) ];

});

嘗試了一下,問題沒有了。然而有人跟我說還是遇到了這個問題, 經過驗證,確實這個問題還是沒有被完全修復。

既然是因為contentoffset改變導致的,我就再設定一下contentoffset應該就行了。於是二次嘗試:

123

4567

dispatch_async(dispatch_get_main_queue(), ^ completion:^(bool finished) ];

});

試驗結果發現,沒用,問題還是存在,在這一步耗了不少時間想盡其他辦法都沒搞定問題,直到我將setcontentoffset:方法改為setconentoffset:animated:。 問題就解決了!看來系統裡面這兩個方法的實現是不同的啊。

123

4567

dispatch_async(dispatch_get_main_queue(), ^ completion:^(bool finished) ];

});

不要忽視小問題,在解決問題中鍛鍊思路。

介紹一下你對SOA的認識

這個問題可以從why soa和soa面臨的挑戰入手回答 1.why soa?soa的好處在 減低it成本 重用現有的系統,而且soa系統本身也可以被後來的應用重用 減少維護費用,對現有系統造成很少的改動。增加it收入 快速的適應新的需求,快速的實現,提高效能,實現雲計算 如 google,amazo...

說一下你對MVC的理解?

mvc是model view controler的簡稱。即模型 檢視 控制器。mvc是一種設計模式,它強制性的把應用程式的輸入 處理和輸出分開。mvc中的模型 檢視 控制器它們分別擔負著不同的任務。model 處理業務邏輯的模組。如service dao entity view 負責頁面顯示,顯示m...

關於 ping 一下,你知道哪些?

ping packet internet groper 網際網路包探索器,dos命令中的一種典型的網路診斷工具。ping 是用來檢測本機與網路中另一台主機 即ping後面的目標ip 之間是否可以傳達命令。如果兩台主機之間ping不通,則表明這兩台主機不能建立起連線。它是定位網路通不通的乙個重要手段。...