美文网首页iOS
Xcode10 的坑和 XS XR XSMax 适配

Xcode10 的坑和 XS XR XSMax 适配

作者: biubiu15 | 来源:发表于2018-10-24 15:41 被阅读304次

    Xcode10 的坑

    1. 多余的同名 plist 文件(说的就是 info.plist)
      解决: File -> Workspace Settings -> Project Settings, Build System 修改为 Legacy Build system


      plist.png

      CocoaPods 很重要!
      CocoaPods 很重要!!
      CocoaPods 很重要!!!
      本着重要事情说三遍原则, 真的建议尽量 CocoaPods 来管理第三方库. 编译中发现, pod 进工程的库即使包含了 info.plist 也不会报错, 报错的都是手动拖到工程且含有 info.plist 的库...

    再说个惨痛经历, 朋友公司的项目, 没有用 CocoaPods, 手动拖入了20几个库... 有一天帮他排除问题, 非常酸爽. 百度报错信息, 说是有某些库太老旧了, 需要更新, 但是没指明是哪个库, 只能一个个排除. 也不久, 两个人一起也就搞了一个下午而已(保持微笑) 如果有当初, 如果当初是 pod, 全部更新一下就完事了(保持微笑吧)

    1. Xcode10:library not found for -lstdc++.6.0.9 临时解决
      百度能得到一大堆方案, 就不细说了. 贴个链接, 懒人就不用再百度了, 直接打开吧👇
      https://www.jianshu.com/p/76bd060bab34

    关于众多 X 的适配

    重构项目, 引导页没有记得要 X 的尺寸, 图片变形. 加了 X 的尺寸后, 又没有要 XR XSMax 的尺寸, 而且判断条件只是 if (IS_IPHONE_X), 而 IS_IPHONE_X 的定义为
    #define IS_IPHONE_X (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )812 )== 0)
    总而言之, 满心以为在 XSMax 上跑, 图片肯定会变形的.

    XSMax.png

    结果很完美啊, 跟在 X 上面一样完美啊. 莫不是模拟器抽风了? 放了断点看看

    XSMaxCode.png

    额... 好吧, 启动页也没有做 XSMax 的, 所以 XSMax 默认使用了 X 的启动图, XR 也一样使用了 X 的启动图.

    之所以看起来适配没拉伸问题, 是因为刚好几款 X 的长宽比相差不大, 但是精益求精的话还是建议一一对应所有尺寸.

    X: 812 / 375 = 2.16533
    XR: 896 / 414 = 2.16425
    XSMax: 896 / 414 = 2.16425

    附上各种机型需要启动页的尺寸
    机型 图片尺寸
    XS Max 1242px × 2688px
    XS & X 1125px × 2436px
    XR 828px × 1792px
    iPhone 678 Plus 1242px × 2208px
    iPhone 678 750px × 1334px
    iPhone 5 SE 640px × 1136px

    上面的尺寸是偷了一下博主的👇
    https://blog.csdn.net/fangkong0601/article/details/82800065

    简单总结各种 X :

    • X 和 XS 尺寸一样, 分辨率一样
    • XR 和 XSMax 的尺寸是一样, 但分辨率是不同
    • 如果只设置 X 的启动图, X 系列的其他款会默认使用 X 的启动图
    • X XS XSMax 为三倍屏, 使用 @3x
    • XR 为二倍屏, 使用 @2x

    顺便附上判断各种 iPhone 的代码

    #define kTopBarHeight (IS_IPHONE_X ? 24.0 : 0)
    #define kBottomBarHeight (IS_IPHONE_X ? 34.0 : 0)
    #define kNavBarHeight (64 + kTopBarHeight)
    #define kTabBarHeight (49 + kBottomBarHeight)
    #define kContentHeight (kScreenHeight - kNavBarHeight - kBottomBarHeight)
    
    #define IS_IPHONE_4  (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )480 )== 0)
    #define IS_IPHONE_5  (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )568 )== 0)
    #define IS_IPHONE_6  (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )667 )== 0)
    #define IS_IPHONE_6P (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )736 )== 0)
    #define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
    #define IS_IPHONE_XR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)
    #define IS_IPHONE_XSMAX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)
    
    #define kScreenHeight [UIScreen mainScreen].bounds.size.height
    #define kScreenWidth [UIScreen mainScreen].bounds.size.width
    
    #define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
    #define StrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
    
    

    相关文章

      网友评论

        本文标题:Xcode10 的坑和 XS XR XSMax 适配

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