前言
scrollToTop屬性提供了點(diǎn)擊iPhone狀態(tài)欄頁面回到頂部的功能,極大的方便了開發(fā)者的工作量毁嗦。但是在使用的過程中鼠锈,因?yàn)轫撁娴膹?fù)雜,經(jīng)常會造成scrollToTop不生效的問題惜索。
下文中提到的UIScrollView是指繼承自或者包含了UIScrollView的View,如UITextView剃浇,UICollectionView, UITableView巾兆,UIWebView等
首先,在確保scrollToTop = YES或者是scrollViewShouldScrollToTop:代理方法返回的是YES的情況下虎囚,如果scrollToTop無效角塑,那么就要檢查下當(dāng)前view上是不是有多個(gè)UIScrollView了。
接下來是逐步排查這個(gè)問題的步驟:
- 嘗試直接查找頁面上的其它UIScrollView,設(shè)置scrollToTop = NO;
- 如果第一步已經(jīng)做過淘讥,scrollToTop仍然無效圃伶,那么就使用分類方法打印出當(dāng)前頁面上的所有scrollToTop = YES的view,并把隱藏的這些UIScrollView的scrollToTop設(shè)置為NO
@interface UIView (UIScrollViewDetect)
- (void)detectScrollsToTopViews;
@end
@implementation UIView (UIScrollViewDetect)
- (void)detectScrollsToTopViews {
for (UIView *view in self.subviews) {
if ([view isKindOfClass:UIScrollView.class]) {
UIScrollView *scrollView = (UIScrollView *)view;
if (scrollView.scrollsToTop) {
NSLog(@"%@", scrollView);
}
}
[view detectScrollsToTopViews];
}
}
@end
- 如果找到了影響的UIScrollView蒲列,但是view是第三方庫里的窒朋,無法修改其scrollToTop的屬性,那么可以使用extension在當(dāng)前類中把私有的UIScrollView的屬性暴露出來蝗岖,再設(shè)置其scrollToTop屬性侥猩,操作方法參考另外一篇文章:
OC中使用類別Extension調(diào)用私有方法
作者語:
開發(fā)中遇到的大部分問題都有跡可循,碰到問題不要急躁抵赢,認(rèn)真分析欺劳,逐步突破,最終一定能解決铅鲤。