美文网首页
iPhoneX简单适配

iPhoneX简单适配

作者: 灰s | 来源:发表于2017-11-17 16:56 被阅读0次

    如果想看详细的iOS11变动,可转到这篇文章观看。
    http://www.jianshu.com/p/342142c25b90

    本文是直接写出了iPhoneX的相关适配

    1. 首先是判断是否为X

    这里我用的方法比较直接,暂时没碰到什么bug,如果各位有更好的方法请指教。

    多说一句这里不能用宏定义
    或者在Swift中不要写成let dzy_ifX: Bool = Screen_H == 812 ? true : false
    这样定义有时候会出问题,大概是因为Screen_H不同的情况可能会有不同。

    let Screen_H = UIScreen.main.bounds.size.height
    
    public var dzy_ifX: Bool {
        if Screen_H == 812 {   
            return true
        }else {
            return false
        }
    }
    

    2. UINavigationBar高度的更改

    在老代码中,如果是手码编程,相信很多朋友都跟我一样项目里面有很多的64这个数字,我是使用了一个变量来代替这个64,在全局找一下所有的64进行替换
    我这个方法并不完善,很明显在我的项目里面,我没有使用到LargeTitle,如果使用到了LargeTitle 这里就不是8864了,可以自行修改一下。

    public var NaviH: CGFloat {
        if Screen_H == 812 {
            return 88
        }else {
            return 64
        }
    }
    

    下面的两张图都是iOS11之后多出一个Largetitle的

    image.png
    image.png

    3. UITabbar高度的更改

    在iPhoneX中,UITabBar的高度示意图如下。

    image.png
    其他的手机中,Tabbar的高度为49,在iPhoneX中,多了一个圆角矩形区域,高度为34
    image.png
    我所有界面的适配就是按着这个TabBar的样式来进行适配的。在ViewController中把最下面留出了一个34
    image.png
    当然了,你也可以根据页面的具体情况来衡量用不用留这个34

    我在所有需要空出这个高度的地方,计算高度的时候都加了一个自定义的变量,如下所示。

    public var TabRH: CGFloat {
        if Screen_H == 812 {
            return 34
        }else {
            return 0
        }
    }
    

    4. automaticallyAdjustsScrollViewInsets属性的弃用

    在iOS11中,该属性已经被弃用,如果有地方用到了这个,需要进行更改。
    不过该属性是UIViewController的 而替代的contentInsetAdjustmentBehavior属性为UIScrollView的。
    具体怎么修改可以自行考虑。
    我只是简单的给UIViewController做了一个扩展,添加了如下方法。

      func dzy_adjustsScrollViewInsets(_ scrollView: UIScrollView? = nil) {
            if #available(iOS 11.0, *) {
                if let scrollView = scrollView {
                    scrollView.contentInsetAdjustmentBehavior = .never
                }
            } else {
                automaticallyAdjustsScrollViewInsets = false
            }
        }
    

    5. 友情提示,iOS11以后界面中间的线不要使用CollectionView的背景色加间隔来做。

    比如我这里,我是用了0.5的间隔加灰色背景做的间隔,就会出现类似下图的问题。
    然后我用白色背景,自己在每个cell里面加0.5宽度的线依旧会有这类问题。

    这张图是自己手动划线的截图

    大概的原因是cellframe不是一个整数导致的。像这种一行4个cellcell的宽度根据屏幕宽来计算的,不是整数很正常。
    在iOS11之前,也会偶尔有类似的问题,比如你可以去搜一下,iOS UILabel字体模糊,这种关键字的文章,讲的也都是一个问题。但是在iOS11之后这个问题变得更明显的,我感受最明显的就是UICollectionView中用间隔和背景色划线的方式。
    这种问题我所知道的最简单的处理方式是,用系统自带的数学函数,把你的View或者Cellfrmae修改成整数的。类似下面这样,我使用的是floor函数 :

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            switch indexPath.section {
            case 0:
                return CGSize(width: Screen_W, height: UI_H(150))
            case 3:
                return CGSize(width: Screen_W, height: UI_H(85))
            default:
                return CGSize(width: floor(Screen_W / 4.0), height: floor(UI_H(75)))
            }
        }
    

    如果你对各种数学函数有兴趣,可以跳转我的另一篇文章
    http://www.jianshu.com/p/822e720bbc8e

    相关文章

      网友评论

          本文标题:iPhoneX简单适配

          本文链接:https://www.haomeiwen.com/subject/hppjvxtx.html