1. 程式人生 > >iPhone X適配之MJ上拉載入更多的適配

iPhone X適配之MJ上拉載入更多的適配

問題分析

   在完美適配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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。