UIScrollView旋轉(zhuǎn)時(shí)函數(shù)調(diào)用次序

近期項(xiàng)目中需實(shí)現(xiàn)分頁(yè)的ScrollView旋轉(zhuǎn)功能,但是遇到一個(gè)相當(dāng)奇怪的問(wèn)題:當(dāng)scrollView處于最后一頁(yè)時(shí),旋轉(zhuǎn)后的contentOffset值會(huì)異常,即旋轉(zhuǎn)后scrollView可能不在最后一頁(yè)。通過(guò)查找StackOverFlow和試驗(yàn),最終發(fā)現(xiàn):當(dāng)scrollView處于最后一頁(yè)時(shí),旋轉(zhuǎn)時(shí)調(diào)用的函數(shù)是不同的。

正常情況下(非最后一頁(yè)),函數(shù)調(diào)用順序如下:

  1. willRotateToInterfaceOrientation:duration:
  2. willAnimateRotationToInterfaceOrientation: duration:
  3. didRotateFromInterfaceOrientation:

最后一頁(yè)時(shí),函數(shù)調(diào)用順序如下:

  1. willRotateToInterfaceOrientation: duration:
  2. scrollViewDidScroll:
  3. willAnimateRotationToInterfaceOrientation: duration:
  4. didRotateFromInterfaceOrientation:

UIScrollView在旋轉(zhuǎn)時(shí),會(huì)通過(guò)UIViewAutosizingMask的規(guī)范自動(dòng)調(diào)整bounds的大小,這個(gè)bounds的變化在willAnimateRotationToInterfaceOrientation: duration:可以捕捉到,但是當(dāng)UIScrollView處于最后一頁(yè)時(shí),系統(tǒng)在我們捕捉到scrollView尺寸變化之前調(diào)用了scrollViewDidScroll函數(shù),恰巧我們經(jīng)常性的在此函數(shù)中做翻頁(yè)處理,從而導(dǎo)致了頁(yè)面顯示的不準(zhǔn)確。

解決辦法:在willRotateToInterfaceOrientation: duration:中強(qiáng)制將UIScrollView的scrollEnabled屬性置為NO,然后在didRotateFromInterfaceOrientation:再次將scrollEnabled屬性置為YES。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容