iOS11以及iPhone X 的适配

最近在做iOS11以及iPhone X 的适配,遇到的一点问题,简单记录一下。
PS:模拟器我拖动的时候老感觉拖不动 原来要把就把鼠标放到四个角的时候,才可以随便拖动

问题一、iPhone X 启动App齐刘海没显示

我的项目启动图不是使用xib和SB适配的,结果在iPhone X上一启动起来就是这样,请看下图

图一.png

解决方案

方案一:项目使用LaunchScreen.xib或者LaunchScreen.storyboard配置启动图,这个大家都懂,就不做介绍了。

方案二:在LaunchImage 里面添加上iPhoneX的启动图 规格为1125 × 2436
修改Contents.json文件,添加如下内容

  {
      "extent": "full-screen",
      "idiom": "iphone",
      "subtype": "2436h",
      "filename": "1125_2436.png",
      "minimum-system-version": "11.0",
      "orientation": "portrait",
      "scale": "3x"
  }

然后齐刘海就出来了,我看着齐刘海特别像牛角,挺可爱的,工程启动图如下:

图二.png

问题二:iOS11 的 UITableview UICollectionView MJRefresh下拉刷新显示

iOS11表格用MJRefresh框架下拉刷新的时候界面会闪,显示紊乱,
原因是iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它

_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

  //声明tableView的位置 添加下面代码  


    if (@available(iOS 11.0, *)) {  
        _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;  
        _tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0);  
        _tableView.scrollIndicatorInsets = _tableView.contentInset;  
    }

问题三:iOS 11 自定义UINavigationBar适配问题,导航条向上偏移20点问题

解决方案 自己写一个类 继承UINavigationBar 重写layoutSubviews方法改变frame即可。

Swift

override func layoutSubviews() {
    super.layoutSubviews()
    

    if #available(iOS 11.0, *) {

        for itemView in subviews {
           
            let albumClassName = NSStringFromClass(itemView.classForCoder)
            if albumClassName.contains("Background"){
            
                itemView.frame = bounds
            } else if albumClassName.contains("ContentView"){
                
                var frame = itemView.frame
                frame.origin.y = 64 - 44
                frame.size.height = bounds.size.height - frame.origin.y
                itemView.frame = frame
            }
            
        }

    }
}

OC

- (void)layoutSubviews {
  [super layoutSubviews];

   if (@available(iOS 11.0, *)) {

    for (UIView *view in self.subviews) {
        if([NSStringFromClass([view class]) containsString:@"Background"]) {
            view.frame = self.bounds;
        }
        else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
            CGRect frame = view.frame;
            frame.origin.y = 64 - 44;
            frame.size.height = self.bounds.size.height - frame.origin.y;
            view.frame = frame;
        }
    }
  }

}

你可能感兴趣的:(iOS11以及iPhone X 的适配)