最近产品提了一个需求:要求某个“输入框”禁止输入 Emoji 表情,我们能想到的方案是:在 UITextField
的 textField:shouldChangeCharactersInRange:replacementString:
代理方法中判断即将输入的字符串是否包含 Emoji 表情,如果包含,就在该方法中返回 NO
,不允许输入。
再谈 UITableView 的 estimatedRowHeight
今天发现之前写的一个基于 UITableView
的列表页面存在如下问题:
当列表在滑动过程中,特别是往下滑快接近底部时,右侧的滚动条一直在不断地抖动,并且滚动条的长度也在不断地微小变化;另外,当滑动到底部加载下一页数据并
reloadData
后,列表的内容会整体跳动往上偏移一段距离。这是什么原因呢?
微信小程序“反编译”实战(二):源码还原
在上一篇文章《微信小程序“反编译”实战(一):解包》中,我们详细介绍了如何获取某一个小程序的 .wxapkg
包,以及分析了 .wxapkg
包的结构,最后通过脚本解压获取包中的文件:小程序“编译”后的代码文件和资源文件,但是由于这些文件大部分被混淆了,可读性很差,所以本文将进一步分析,尽可能地把 .wxapkg
包的内容还原为“编译”前的内容。
微信小程序“反编译”实战(一):解包
本实战教程将一步步告诉你如何“反编译”获得其它小程序的源代码,包括“解包”和“源码还原”两篇,主要参考了看雪论坛、V2EX、GitHub 等网站上的帖子、教程、工具,在此不胜感激,参考链接详见文章底部,以及加上了我自己的一些理解和总结。
使用 YYFPSLabel 快速检测页面滑动的流畅度
FPS
(Frames Per Second) 是图像领域中的定义,表示每秒渲染帧数,通常用于衡量画面的流畅度,每秒帧数越多,则表示画面越流畅,60fps 最佳。
在 iOS 开发中,在复杂布局的列表页面,我们通常需要对列表的滑动进行性能优化,以保持页面流畅。对于保持流畅的优化技巧,可以参见 @ibireme
的这篇文章《iOS 保持界面流畅的技巧》,我们不再赘述。
这里主要介绍一下如何快速检测页面滑动的流畅度,即如何检测屏幕的 FPS
?
Objective-C 可变容器对象的初始化方法使用总结
最近在 Review Code 时,发现团队中不同成员对一个 可变字典空对象
的初始化方式写法都不太一致,主要有以下几种:
1 | // 第 1 种 |
使用 LLDB bugreport 命令导出 App 运行崩溃日志
在日常开发调试 App 过程中,当我们写的代码有 Bug 导致崩溃时,此时我们通常会断点到崩溃的位置,然后查看 Xcode 控制台输出崩溃原因进行解决。
但有些时候我们手头可能有其它的活不能立即进行排查,或者崩溃的是其他同事的代码,需要先把控制台的崩溃日志复制粘贴到其他地方保存起来,过后再看或者告知同事进行解决。强大的 LLDB 调试工具提供了一个 bugreport
命令帮我们快速完成导出日志这件事。
如何优雅地获取 ScrollView 的滚动方向
在有些场景,我们可能需要获取 UIScrollView
(及其子类)的滚动方向来做不同的操作。
我们首先能想到最直观的方法是:用一个变量或属性 lastContentOffset 去保存 scrollView 上次的 content offset
值,然后在 UIScrollView
的 scrollViewDidScroll:
delegate 方法中跟 scrollView 当前实时的 content offset
做对比来判断滚动方向,代码大致如下:
使用 NSUserDefaults 存储 NSDictionary 的一个坑
前两天,@Vong 同学在我们知识小集群里发了一段用 NSUserDefaults
存储一个 NSDictionary
字典对象的测试代码,虽然代码看起来似乎很正常,但是运行的时候报错了,根据群里大家的讨论结果,本文整理总结一下。
使用 LLDB expression 命令调试动态更新 UI
在日常 App 开发过程中,进行真机或者模拟器调试时,我们可能需要微调一下界面上的 UI 元素,比如色值、位置等来看看效果,但如果每次都通过修改代码,然后重新编译运行会比较麻烦,其实我们可以通过 LLDB 调试命令来动态地修改。
LLDB 的 expression
命令用于执行一个表达式,并将表达式返回的结果输出。