此方法僅解決有多個scrollView嵌套的情況下,點擊狀態(tài)欄無法回到頂部的問題。在iOS13之前,有兩種方式可以解決此問題:
1、touchBegin 獲取狀態(tài)欄點擊事件
2、添加一個優(yōu)先級高于statusbar的Window,添加點擊事件。
當然此兩種方法都需要自行解決滾動事件,此處不贅述。
但在iOS13之后此兩種方法均失效了,原因是狀態(tài)欄的事件被UIStatusBarManager接管了。
如果僅僅是只是一個scrollView的結(jié)構,點擊狀態(tài)欄回到頂部的操作系統(tǒng)以及替我們完成了,但是若是兩個scrollView嵌套的結(jié)構,系統(tǒng)會無法判斷應該將哪一層的scrollView回到頂部。
解決方法是通過scrollViewShouldScrollToTop代理方法,根據(jù)外層scrollView的contentOffset是否是在頂部來控制此方法的返回值。
代碼如下:
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
return 外層的scrollView.contentOffset.y == 0;
}
原理是通過禁用底層scrollView回到頂部的方法,來使系統(tǒng)完成外層的scrollView回到頂部的操作。當外層的scrollView回到頂部之后,再讓底層的scrollView回到頂部。
Done。