zoukankan      html  css  js  c++  java
  • iPhoneX 适配总结

    一、iPhoneX适配第一步,根据iPhoneX的屏幕像素大小,引入对应的启动图,告诉系统,app兼容iPhoneX

      

      需要在launchimage中引入一张 1125*2436的png,app将默认展示支持iPhoneX的效果

    二、安全区域的概念

      所谓的安全区域是一个虚拟出来的概念,因为iPhoneX独特的刘海,所以划定一个矩形的区域,在这个区域之内展示的内容不会被弯曲的屏幕切割,因此叫做安全区

      

      安全区怎么定义?

      每个viewcontroller对应一个view,view中的属性描述上面红色区域的距离

      @property (nonatomic,readonly) UIEdgeInsets safeAreaInsets API_AVAILABLE(ios(11.0),tvos(11.0));

      默认情况下面,在规则的屏幕比如iphone8,iphone8+ 上面, safeAreaInsets 中四个边距是0;如果是iPhoneX上面,苹果系统会自动给safeAreaInsets指定一些值,比如顶部距离64

      

      怎么使用safeAreaInsets?

      为了不要让view中的元素被遮挡,你需要动态调整view中元素的位置,比如下面的代码,  

         CGFloat xOffset = 0.0;
            if (@available(iOS 11.0, *)) {
                xOffset = self.view.safeAreaInsets.left;
            }
            self.resourceAllocView.left = xOffset + self.resourceAllocView.left;
            self.liveDataView.left = xOffset + self.liveDataView.left;
            self.splitView.left = xOffset + self.splitView.left;
            self.labelTitle.left = xOffset + self.labelTitle.left;
           _imageViewReturn.left = xOffset + _imageViewReturn.left;

      如果你使用的是autolayout

    if #available(iOS 11, *) {
      let guide = view.safeAreaLayoutGuide
      NSLayoutConstraint.activate([
       greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
       guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)
       ])
    
    } else {
       let standardSpacing: CGFloat = 8.0
       NSLayoutConstraint.activate([
       greenView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: standardSpacing),
       bottomLayoutGuide.topAnchor.constraint(equalTo: greenView.bottomAnchor, constant: standardSpacing)
       ])
    }

    三、何时使用

      当安全区边距变化之后,系统会在方法通知你

      - (void)viewSafeAreaInsetsDidChange

      这个方法存在于ViewController和View之中,你可以在这里对元素位置做出修正

    四、Home键指示器  

      - (BOOL)prefersHomeIndicatorAutoHidden
      {
        return YES;
      }

      如果你需要隐藏Home键可以通过上面的方法

    五、总结

      苹果发展到现在,可以发现每个版本中都会新增一些界面布局的API和废弃一些API,这个让开发者增加了很多成本

      autolayout布局的方式苹果也没有放弃,甚至用的更多。frame布局越来越不好用,看来要用autolayout才能拥抱未来了

      希望苹果在排版上多多学习Android的xml布局方式,更容易理解和灵活

    六、参考

      iPhone X适配集合

      https://github.com/2877025939/iOS11   

  • 相关阅读:
    TCP流量控制,拥塞控制原理
    Java数组--求一个数组中连续m个数的和最大的数组组合
    一次使用IDEA编写JDK动态代理Class数组中有关泛型的问题
    Java数组--一个整型数组,给定一个定数,求数组中两个数的和与定数相等
    Java基础知识--Stream接口的理解与应用
    JSAP107
    JSAP106
    JSAP105
    JSAP104
    JSAP103
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/8124921.html
Copyright © 2011-2022 走看看