問題分析
???在完美適配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間的版本控制)。