iPhoneX简单适配
发布日期:2021-06-24 18:21:28 浏览次数:2 分类:技术文章

本文共 2430 字,大约阅读时间需要 8 分钟。

如果想看详细的iOS11变动,可转到这篇文章观看。

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

1. 首先是判断是否为X

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

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

let Screen_H = UIScreen.main.bounds.size.heightpublic 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的

3. UITabbar高度的更改

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

其他的手机中,
Tabbar的高度为
49,在iPhoneX中,多了一个圆角矩形区域,高度为
34
我所有界面的适配就是按着这个
TabBar的样式来进行适配的。在
ViewController中把最下面留出了一个
34
当然了,你也可以根据页面的具体情况来衡量用不用留这个
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)))        }    }复制代码

如果你对各种数学函数有兴趣,可以跳转我的另一篇文章

转载地址:https://blog.csdn.net/weixin_34248258/article/details/87983360 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:#iOS适配iPhoneX上下出现黑色区域
下一篇:Android应用程序通用自动脱壳方法研究

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月26日 12时49分32秒