iPhone X 适配(Swift篇)

作者: 伪文艺的程序员 | 来源:发表于2017-11-06 16:36 被阅读596次
    🇨🇳中文介绍

    随着iPhone X的销售,相信各位土豪很多都已经入手iPhone X了吧,反正我是比较喜欢的,无奈囊中羞涩,只能玩玩模拟器了。

    iPhone X 镇楼

    这只是个模拟器

    1.科普模拟器样式

    xcode 9 模拟器自带保护套,有人喜欢有人厌,据说大神都念旧,其实模拟器是可以调的,如果你用的本的屏幕比较小,你可以把鼠标放在模拟器四周调节大小。如果你想找回以前的感觉,请跟着下图做:

    样式调节 没有立体感的平面

    2.科普iPhone X的设计图

    网上找的图

    从这个图里面,我们可以看到iPhone X的边框都是圆角,这证明了苹果的发展方向,从6开始的圆弧到现在的X,扁平化更加突出,从上图的样式可以看出,几乎就像一张纸。这张图上我们可以看出来状
    态栏变了,为了迎合齐刘海iPhone X的状态栏从原来的20变更为现在的44

    3.科普启动页的适配

    iPhone X采用的是跟plus一样的@3x图,而不是大家臆想出来的@4x图。记得昨天,上周设计妹妹钉钉上问我,iPhone X难道要单独做套图吗?恶作剧的心理调戏妹子,我回了个🙂,妹子傻乎乎的开始切图,切着骂着我曹,四倍图还得计算,草草草,我装着啥也没听到,出去抽根烟回来,妹子告诉我,先给你几张图吧,我晚上估计得加班了,我看看妹子说,晚上请我吃饭,我只让你切一张图,其余我用代码实现,妹子当时高兴地差点抱住我,这逼我感觉装的可以。言归正传啊,如果你用的是LaunchImage来管理启动页的,去找妹子弄一张1125 * 2436的图,如果你使用的是LaunchScreen来管理启动页的,你也可以去找妹子要张图,毕竟UI妹子都很萌的,开玩笑啦,主要是iPhone X的宽高比发生了变化,8的宽度,8p他哥的高度。记住啊,1125 * 2436

    4.导航栏的适配

    其实吧很简单的,我就自定义了几个宏,全局替换了一下,谁让我跟不上苹果爸爸的步伐呢,把导航栏高度全部写死为64了。

    /************************  屏幕尺寸  ***************************/
    // 屏幕宽度
    let JMTWindowWidth = UIScreen.main.bounds.size.width
    
    // 屏幕高度
    let JMTWindowHeight = UIScreen.main.bounds.size.height
    
    // iPhone4
    let isIphone4 = JMTWindowHeight  < 568 ? true : false
    
    // iPhone 5
    let isIphone5 = JMTWindowHeight  == 568 ? true : false
    
    // iPhone 6
    let isIphone6 = JMTWindowHeight  == 667 ? true : false
    
    // iphone 6P
    let isIphone6P = JMTWindowHeight == 736 ? true : false
    
    // iphone X
    let isIphoneX = JMTWindowHeight == 812 ? true : false
    
    // navigationBarHeight
    let navigationBarHeight : CGFloat = isIphoneX ? 88 : 64
    
    // tabBarHeight
    let tabBarHeight : CGFloat = isIphoneX ? 49 + 34 : 49
    

    其实吧,这就是懒散造成的,代码不规范,我常给团队的人开会说,不要在代码里出现太多的重复代码,重复数字,重复字符串等等等等,我们要保持代码简洁优美,哈哈哈,说归说,做归做,不过我别的都做到了,就这一个疏忽啊,因为谁想到他还会变呢。

    没有问题
    完美切合

    5.MJRefresh和继承自UIScrollView的视图的iOS 11适配

    背景:前两天一个同行问我了一个问题:

    问题
    还有就是说如果你使用了MJRefresh进行刷新,并且你隐藏了导航栏,就会出现下拉刷新错乱的问题。
    这跟我这哥们问的问题是一种类型的,因为iOS 11上废除了automaticallyAdjustsScrollViewInsets这个方法,使用UIScrollView's contentInsetAdjustmentBehavior来代替,解决办法就是一段代码:

    OC:

     if (@available(iOS 11.0, *)) {
            self.collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }else {
            self.automaticallyAdjustsScrollViewInsets = NO;
        }
    

    swift:

    if #available(iOS 11.0, *) {  
        tableView.contentInsetAdjustmentBehavior = .never  
    } else {  
        self.automaticallyAdjustsScrollViewInsets = false  
    }  
    

    因为哥们是OC写的项目,大家用的时候注意写成Swift。

    6.iPhone X 脚底适配

    脚底适配,这个就要看你们公司产品的意见了。
    其实底部圆角距离是34
    说白了就是设置你底部按钮距离下边界34
    注意不要让上面的视图盖到了底部按钮。因为viewSafeAreaInsetsDidChange调用顺序实在viewWillAppear之后,在viewWillLayoutSubvies之前调用。

    7.iOS 11 下tableView的头视图和脚视图

    在iOS11里面有时候在tableView的头部和尾部留白,因为苹果给滚动试图加进去了self-sizeing,开始计算逐步计算contentSize,默认如果不去实现viewForHeaderInSection就不会调用heightForHeaderInSection,尾部试图一样。

    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {  
        return nil  
    }  
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {  
        return nil  
    }  
    

    如果你不想实现viewForHeaderInSection也不想留白,那么只需要你把self-sizeing自动估高关闭即可

    /// 自动关闭估算高度,不想估算那个,就设置那个即可
    self.tableView.estimatedRowHeight = 0
    self.tableView.estimatedSectionHeaderHeight = 0
    self.tableView.estimatedSectionFooterHeight = 0
    

    8. xcode 无线真机测试

    这应该是xcode 9的一个亮点吧,但是速度真的不敢恭维。注意手机和电脑必须在同一个局域网内
    首先使用手机连接xcode之后,打开window->Devices and Simulator->勾选Show as run destinationConnect via network,这样就可以无线测试了,反正我还用线吧,因为我是个传统的人。

    9.iOS 11 真机地图

    iOS 11地图适配,在iOS11中,如果使用到地图,我们就需要在info,里面添加NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription才可以在iOS 11里面正常调出地图。

    总结

    最近懒得要死,什么都提不起劲,所以文章拖到现在才写。各位请见谅,嘻嘻。有人买X的话,留个言,只要告诉我,玩着美不美就行了。

    福利

    壁纸大全

    相关文章

      网友评论

      本文标题:iPhone X 适配(Swift篇)

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