iPhoneX简单适配

2017-11-17  本文已影响0人  灰s

如果想看详细的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

上一篇下一篇

猜你喜欢

热点阅读