近期項目中需實現(xiàn)分頁的ScrollView旋轉功能,但是遇到一個相當奇怪的問題:當scrollView處于最后一頁時,旋轉后的contentOffset值會異常,即旋轉后scrollView可能不在最后一頁。通過查找StackOverFlow和試驗,最終發(fā)現(xiàn):當scrollView處于最后一頁時,旋轉時調(diào)用的函數(shù)是不同的。
正常情況下(非最后一頁),函數(shù)調(diào)用順序如下:
- willRotateToInterfaceOrientation:duration:
- willAnimateRotationToInterfaceOrientation: duration:
- didRotateFromInterfaceOrientation:
最后一頁時,函數(shù)調(diào)用順序如下:
- willRotateToInterfaceOrientation: duration:
- scrollViewDidScroll:
- willAnimateRotationToInterfaceOrientation: duration:
- didRotateFromInterfaceOrientation:
UIScrollView在旋轉時,會通過UIViewAutosizingMask的規(guī)范自動調(diào)整bounds的大小,這個bounds的變化在willAnimateRotationToInterfaceOrientation: duration:可以捕捉到,但是當UIScrollView處于最后一頁時,系統(tǒng)在我們捕捉到scrollView尺寸變化之前調(diào)用了scrollViewDidScroll函數(shù),恰巧我們經(jīng)常性的在此函數(shù)中做翻頁處理,從而導致了頁面顯示的不準確。
解決辦法:在willRotateToInterfaceOrientation: duration:中強制將UIScrollView的scrollEnabled屬性置為NO,然后在didRotateFromInterfaceOrientation:再次將scrollEnabled屬性置為YES。