个人项目总结 | 日常

【那些年我们一起踩过的坑】

  • 主要是在项目中遇到的问题以及简单的解决方法做个记录

图片

【上线前】

近期在做一个金融理财的app,期间遇到了不少小问题,很多测试时候看似不存在的情况,到了实际生产环境中就出现 ( 很蓝受 )

1.金融类产品对于金额比较敏感(由于之前没接触关于金融理财的app所以 很惨),切记一点!不要使用 double 以及 float 类型进行计算,比较,因为这两个精度会出现极小极小的误差,导致在比较大小等情况时候出现失败等不应该出现的情况

解决方法:

  • 建议使用NSDecimalNumber 该类型计算
  • 当然也可以利用 .2f 的四舍五入机制避免这极小误差导致的问题

贴一段NSDecimalNumber介绍:顾名思义这是一个十进制数字类,继承自NSNumber,苹果针对浮点类型计算精度问题提供出来的计算类,基于十进制的科学计数法来计算,同时可以指定舍入模式,一般用于货币计算。

2.开发期间apple大大发布了iphoneX ,iphone8 以及 iphone8P 这几个机型,其中8和8p的屏幕大小和7保持的一直,比较麻烦的是X这个机型 ( 啥子哟,怎么会有这么奇怪的界面 ) 比较特殊 大致样子是这样的:

图片

图片

其中主要存在的问题:1.流海的高度 2.底部bar的高度 ,3.需要使用到用户touchID 解锁付款等操作的(因为类似支付宝微信用到指纹解锁 付款等 )在iphoneX上使用的faceID 脸部识别进行解锁
大多数需要关注的问题是:1.流海的高度,2.底部tabbar高度

  • 自定义导航栏 自由控制导航栏的高度 在适配时候可以判断是否IphoneX来调整高度(类似这样的宏定义 ([[UIApplication sharedApplication] statusBarFrame].size.height>20?44:0) )
  • ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49)

3.期间发布了ios 11 版本 碰到个奇怪的问题 tableView 等有scrollView的view的内容都下移了 (哦嚯~)

原因是在iOS 11中Apple干掉了ViewController中的automaticallyAdjustsScrollViewInsets这个属性,当tableview的frame超出了安全区域后系统会自动的调整SafeAreaInsets的值,而iOS 11中真正影响tableview内容与边缘的变成了adjustedContentInset而不是以前的contentInset。由于系统对adjustedContentInset进行了调整导致了tableView的内容到边缘的距离发生了变化,下移距离分别是20pt(没有navigationBar,下移了一个statusBar的高度),64pt(navigationBar的高度以及statusBar的高度)。[抄一段文字嘿嘿嘿]

解决方法:

  • 去掉contentInset 因为在iOS 11中系统已经默认对scrollview的显示做了处理只要其超过安全区域,它的内容显示都会在view上正常显示,所以就不需要设置contentInset,避免发生偏移。
  • 设置contentInsetAdjustmentBehavior 在不改变contentInset的情况下通过增加安全区域的范围来抵消掉SafeAreaInset的值,如果SafeAreaInset值为(20,0,0,0),那么设置additionalSafeAreaInsets属性值为(-20,0,0,0),则SafeAreaInsets不会对adjustedContentInset值产生影响
  • 把tableview的frame控制在安全区域内且不设置contentInset

这里贴一个链接https://github.com/2877025939/iOS11 别人整理的关于ios 11和iphoneX适配的

【其他】

递归必须有一个明确的结束条件,不然回想上面例2一样出现无限循环
每一次执行应当更加接近我们的结束条件
深层次的递归可能导致栈溢出

暂时就想到这么多~至于代码,这样的代码搜索引擎更加专业~等有空在写下具体代码