iPhone X適配之MJ上拉載入更多的適配
阿新 • • 發佈:2018-12-21
問題分析
在完美適配iOS11和iPhone X上的兩套方案文章,我們已基本完成了UIScrollview的適配問題,但還會存在一個問題,當tableview/collectionView 使用上拉載入更多時,因為調整了contentInset (0,0,34,0),造成“上拉載入更多”文字顯示在HomeIndicator 區域,並與HomeIndicator的黑色條重疊,僅是檢視顯示問題,並不涉及業務邏輯問題。我們可以調整文字向下偏移,這個問題是與MJRefresh的沒有適配iPhone X有一定關係,但是請勿直接改動MJRefresh。
查詢MJRefreshFooter我們會發現
/** 忽略多少scrollView的contentInset的bottom */ @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; MJRefreshHeader也有對應的屬性 /** 忽略多少scrollView的contentInset的top */ @property(assign,nonatomic)CGFloatignoredScrollViewContentInsetTop; 在此,我們通過ignoredScrollViewContentInsetBottom 修正contentInset引起的問題。
參考處理方法
對MJRefresh 封裝的一個分類UICollectionView+Refresh 中
/** 新增footerRefresh @param target 載入更多相響應者 @param action 載入更多的響應方法 @param isExtendHomeIndicator scrollview是否拓展到HomeIndicator區域 */ - (void)yg_addFooterViewWithTarget:(id)target action:(SEL)action isExtendHomeIndicator:(BOOL)isExtendHomeIndicator { MJRefreshBackNormalFooter*loadFooter = [MJRefreshBackNormalFooterfooterWithRefreshingTarget:targetrefreshingAction:action]; [loadFootersetTitle:@"上拉載入更多"forState:MJRefreshStateIdle]; [loadFootersetTitle:@"放手載入更多"forState:MJRefreshStatePulling]; [loadFootersetTitle:@"載入中..."forState:MJRefreshStateRefreshing]; loadFooter.stateLabel.font= [UtilgetFontWithSize:FONT15 weight:FontWeightDefault fontOption:FontEqual]; loadFooter.stateLabel.textColor= [UtiltransferStringToColor:contentColor]; //iPhone X 並且 scrollview是否拓展到HomeIndicator區域 if(IS_IPHONE_X_YG&& isExtendHomeIndicator) { UIViewController*currentVC = [UtilcurrentViewController]; //不存在tabBarController或 不顯示tabbar 或已做contentInset調整,需要修正 if(!currentVC.tabBarController|| currentVC.hidesBottomBarWhenPushed || self.contentInset.bottom == IPHONE_X_HOME_HEIGHT) { //調整忽略多少scrollView的contentInset的bottom loadFooter.ignoredScrollViewContentInsetBottom=IPHONE_X_HOME_HEIGHT*0.75; } } self.mj_footer= loadFooter; }
需要新增上拉重新整理的地方呼叫該方法即可適配。如有更好方式,或遇到新的問題,歡迎評論,一起探討完善!
強調下,第三方庫儘量用Pod管理,不到萬不得已千萬不要去改動第三方,這不僅僅是實力問題,主要是不便維護,即使不得要改動,請對三方庫做下封裝,用繼承等形式去改寫(分類新增新方法也行,禁用分類重寫原類的方法)。專案的私有庫也可以用Pod管理(注意各個APP間的版本控制)。
作者:給策
連結:https://www.jianshu.com/p/66b09475198d
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。