动态模拟iOS动态类型系统文字大小(UIContentSizeCategory)

前端之家收集整理的这篇文章主要介绍了动态模拟iOS动态类型系统文字大小(UIContentSizeCategory)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想轻松测试我的应用程序与不同的系统文本大小,包括可访问性大小.这些可以在设置应用程序(显示&亮度=>文本大小或通用=>辅助功能=>较大文本)中设置.

目前我可以找到的唯一方法是进入设置并使用UI更改值(编辑:partial solution描述如下).这很慢又麻烦我怀疑有一种方法可以使用私有的API动态地改变它,但是我无法弄明白如何.由于我的目标是只用于调试,私有API使用和swizzling是好的(这段代码将不会生产).

为了尝试找到一个私有的API来做这个,我看了一些逆向工程资源.我是最新的反汇编器,符号表,类转储和查找可以使用的私有API,但这是我迄今为止所尝试的:

>我成功的swizzled – [UIApplication preferredContentSizeCategory](其他帖子说这个工作过去),但这并不影响从[UIFont preferredFontForTextStyle:]返回的结果.
>使用反汇编IDA我发现[UIFont preferredFontForTextStyle:]在私有框架UIFoundation.framework中. ( – [UIApplication preferredContentSizeCategory]在UIKit.framework中,但是反汇编没有任何用处).
>正如我开始写这个问题(总是这样),我发现了一个partial solution.可以在该方案中设置一个启动参数来设置启动时的值.这是有用的,但不是我以后.
>通过上述答案,我found用户偏好的值显然存储在位于模拟器数据/库/首选项目录中的com.apple.UIKit.plist文件中.我们之后的值可以从命令行实用程序plutil设置.这也是一个改进!但是我想在运行时动态地改变它.

更多关于我IDA的结果:

我真的不知道如何阅读反汇编,但是[UIFont preferredFontForTextStyle:]似乎指向一个名为___UIFontForTextStyle的符号,它似乎指向一些有趣的声音符号,叫做_getUIContentSizeCategoryUnspecified和_getUIContentSizeCategoryPreferenceClass

Disassembly for <code></p>___UIFontForTextStyle</code>

我也使用UIFoundation.framework上的命令行实用程序nm找到这些符号.他们用小写字母“s”表示,显然是“The symbol is in an uninitialized data section for small objects.”.我不知道这是什么意思(我所收集的都是他们不是一个类或方法).

在网页上搜索_getUIContentSizeCategory …符号不会产生任何内容,但附近还有另一个符号_getUIApplicationClass.我搜索了一个,因为它听起来更一般,在WebKit source年发现了类似的东西.可能没什么,但也许这是一个内部的苹果惯例.无论如何,这个例子并没有真正帮助我解决问题.

无论如何感谢阅读到目前为止.如果你还在这里,我的问题是:

我想要动态地模拟动态类型大小偏好的值.这些反汇编符号可能有所帮助,但也许我错了.感觉就像解决方案很接近,但我只是不能把所有的东西放在一起.

将此值设置为启动参数是很好的,但不能完全解决我的问题.同样,修改模拟器在plist中的值也对自动化也很好,但是并不能解决我的问题.

有没有办法在运行时动态地改变这个值?

解决方法

多么尴尬!我正在查看一些过时的iOS 9.x文档,并错过了UITraitCollection在iOS 10中获得了init(preferredContentSizeCategory:UIContentSizeCategory)和var preferredContentSizeCategory:UIContentSizeCategory:UIContentSizeCategory,这在 Brandon Williams中有帮助地指出了我.这完全满足了我的需求.

猜你在找的iOS相关文章