前言
本文主要分享了开发中遇到的问题,和相关的一些思考。分享出来给有需要的朋友们参考学习,下面话不多说了,来一起看看详细的介绍吧。
iOS11键盘问题
功能背景:
弹出键盘时,如果有输入框的话,需要输入框的位置跟随键盘大小而变动。
问题描述:
当快速切换键盘之后,容易出现输入框的位置没有紧贴键盘,如下:(以简书键盘为例)

相关实现:
输入框监听系统的UIKeyboardWillShowNotification和UIKeyboardWillHideNotification事件,在回调的过程中用UIKeyboardFrameEndUserInfoKey获取键盘的frame,再动态调整输入框的位置。
问题定位:
此问题可以复现,呼起键盘之后频繁切换键盘。
添加Log进行调试,得到以下结果:
/*
226是系统英文键盘的高度;
292是搜狗输入法键盘的高度;
271是emoji键盘的高度;
*/
UIKeyboardWillShowNotification : {{0, 510}, {414, 226}}
UIKeyboardWillShowNotification : {{0, 444}, {414, 292}}
UIKeyboardWillShowNotification : {{0, 510}, {414, 226}}
UIKeyboardWillShowNotification : {{0, 444}, {414, 292}}
UIKeyboardWillShowNotification : {{0, 465}, {414, 271}}
UIKeyboardWillShowNotification : {{0, 510}, {414, 226}}
UIKeyboardWillShowNotification : {{0, 444}, {414, 292}}
实际操作中,当键盘从292高度的搜狗键盘切换成271的emoji键盘的时候,有时会无法触发回调,造成实际上键盘高度产生292-271的误差(21pt)。
正常苹果应该每次切换键盘都回调,但在切换emoji表情键盘的时候,偶现不触发回调。
问题修复:
输入框增高,增加上图左边红框部分的高度;
和键盘对齐的时候,往下计算红框的高度。
附:
iOS 11还有另外的键盘表现异常:在APP中呼起键盘,把APP切入后台,在系统桌面下滑呼起系统搜索的键盘,会导致APP内的键盘收起。
静态库相关
功能背景:
项目中存在某些功能,需要用静态库集成的方式接入。
问题描述:
在线上运行过程中发现某些Crash出自静态库,但是Crash日志里面无法定位到静态库出现Crash的具体代码行数。
如下,testNull的Thread 0发生Crash,但是没有函数相关信息。
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 testNull 0x000000010494aacc 0x104944000 + 27340
1 testNull 0x000000010494aac8 0x104944000 + 27336
2 testNull 0x000000010494a6b0 0x104944000 + 26288
3 UIKit 0x000000018cec4efc -[UIViewController loadViewIfRequired] + 1040
4 UIKit 0x000000018cec4ad4 -[UIViewController view] + 28
5 UIKit 0x000000018cecb6a0 -[UIWindow addRootViewControllerViewIfPossible] + 136
6 UIKit 0x000000018cec890c -[UIWindow _setHidden:forced:] + 272
7 UIKit 0x000000018cf379ec -[UIWindow makeKeyAndVisible] + 48










