做ios开发那么多年了,遇到不少难题,也踩过不少坑洞,本来没想要写这篇文章的,但是鉴于以下几点因素决定对多年遇到过的且能回忆起来的做个笔记。

1、在开发中每次遇到问题,死脑地想解决方案,最后终于解决了满满的成就感。不过下一次再遇到这个问题,不自觉地就再次踏进去这个坑,如何解决,记录下来方便以后好阅读。

2、为其他同样遇到这种坑的开发者一个好的参考吧。

3、在面试的时候,考官最喜欢考的就是这些莫名其妙的坑了,也可以当作面试宝典看。

曾经遇过的坑:

1、修改导航栏颜色

这个问题对有经验的开发者来说不是问题,但是当年笔者刚入行时,确实被这个问题折腾了好久。比如想设置导航栏的颜色为蓝色

self.navigationController.navigationBar.backgroundColor = [UIColor blueColor];

运行,然后......????这特么是蓝色?笔者确定自己不是色盲 enter image description here

2、输入中文时限制字符长度

限制字母、数字、符号等其他非中文字符的长度大家应该都知道咋整,但如果是中文输入法,这就比较蛋疼了。举个例子,限制长度为5,输入“我爱写代码”,当已经输入“我爱写”两字,然后输入“代码”时就会出现如下情况

enter image description here

根本写不进去啊,这是为什么呢?因为输入的拼音也被计算在了字符串长度之内,导致输入“da”以后就不能继续输入了,可通过下面的办法解决 enter image description here

3、手机录音或通话时,app界面整体下移

当你的iphone在录音或者通话时,打开app你会发现,整个界面都下移了20像素,这个问题对于scrollView、tableView等可以垂直滚动的视图可能没有太大影响,但是对于那些不能滚动的视图,就有可能底部被遮盖20像素

笔者在网上查阅了资料,也试过多种方法,这个问题依然存在,最后笔者不得不使用大绝招来解决,何为大绝招?很简单,位置尺寸写死。项目中导航控制器是自定义的,在自定义的类中添加如下代码就OK了 enter image description here

4、点击导航栏下方也会触发导航栏按钮的点击事件

如图所示,每次想选中右上角的图片,结果总是触发“取消”事件,明明没有点到导航栏上面去,问题的原因不清楚,解决方法创建一个UINavigationBar的分类,重写hitTest方法 enter image description here

5、界面莫名其妙下移

这个问题跟第一个的问题一样,都是比较基础的问题,有经验的人都知道如何解决,但是笔者曾经也被折磨过

enter image description here

为什么下面textView的内容不是从最上面开始的,而且还不能滚上去,当初真的被这种情况折腾的死去活来的,改frame,改约束,都没效果。后来才知道,当有导航控制器时,系统会默认将第一个添加的scrollView或其子类视图的内容下移64个像素,下面的textView是先添加的,所以其内容被下移了,而上面的却没有,解决方法是在控制器里加上下面这句代码

self.automaticallyAdjustsScrollViewInsets = NO;

6、自定义相机照片截取

这个问题说难不难,说简单也不简单,笔者当时确实花了很长一段时间才弄清楚,但是当问题解决后,感觉这特么也不复杂啊,之前怎么就没整明白呢

enter image description here

问题是这样的,在使用自定义相机拍完照后,需要对图片的指定区域(蓝色方框内的区域)进行截取然后上传,这里存在两个问题

拍摄时你所看到的区域,跟实际拍出来的区域是不一样的 enter image description here

由于拍摄时所看到视图宽高比与实际拍摄出来的图片的宽高比并不一致,所以导致图片经过等比例缩放到宽度一样时,高度有一部分超出了我们的可视范围,首先,我们要计算出超出部分的高度,超出部分的高度计算完后,我们就要来计算蓝色方框(_circleView,_cameraView的子控件)的坐标了,然后根据计算好的frame截取图片就ok了。

CGRect rect = CGRectMake(x, y, width,height);
CGImageRef tailorImageRef = CGImageCreateWithImageInRect(photo.CGImage, rect);
UIImage *tailorImage = [UIImage imageWithCGImage:tailorImageRef];

结束: 开发得越久,遇到的坑就越多,远远还不止这些,以后再补上吧!