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