Jor*_*n H 5 accessibility objective-c font-size ios
使用iOS 7,可以对您的应用进行编码,以尊重用户对动态类型的设置 - 更大或更小的字体大小.preferredFontForTextStyle:如果用户在您的应用运行时更改了设置,则可以使用该方法然后收听通知以更新UI.我想知道是否可以使用设置>辅助功能中的辅助功能选项"粗体文本"执行相同的操作.我意识到Bold Text选项实际上要求您重新启动设备,因此不需要收听通知,因为您的应用程序将被杀死并重新启动.
这是我最终想要实现的目标:我想将导航栏标题文本更改为较轻的样式字体.它可能不是默认的系统字体 - 它可能是iOS可以显示的任何字体,但我可能会使用HelveticaNeue-Light.我还想尊重用户对Bold Text的偏好.如果它已启用,我想将标题文本更改为相同字体的较重 - 就像iOS默认情况下那样,即使默认值已经非常重 - Helvetica Neue Medium.实际上它确实在启用时会使它更重一些.我想用不同的字体做同样的事情.
这就是我正在做的改变它,但无论大胆的设置是什么,这显然都会得到解决:
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"HelveticaNeue-Light" size:17], [NSFontAttributeName, nil]];
Run Code Online (Sandbox Code Playgroud)
我可能有一个解决方案但似乎是一个糟糕的方法.我正在从一个固定大小的新字体preferredFont的subheadline.这几乎完全符合我的要求 - 它会根据粗体文本设置自动处理字体粗细(HelveticaNeueRegular [我实际上想要光线]禁用时,HelveticaNeueMedium启用时),但不适用于不同的字体.也许有更好的方法?
UIFont *subtitleFont = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
UIFont *titleFont = [subtitleFont fontWithSize:17];
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:titleFont, NSFontAttributeName, nil]];
Run Code Online (Sandbox Code Playgroud)
从iOS 8开始,可以使用UIAccessibilityIsBoldTextEnabled()(docs)和UIAccessibilityBoldTextStatusDidChangeNotification(docs)检测用户是否在设置中启用了粗体文本.
对于同样需要iOS 7支持的应用程序,我写了一个优雅的单行程,可以在iOS 7和8上使用Helvetica Neue,甚至可以在iOS 9上使用旧金山字体,基于标准重量字体通常的事实称为"常规"权重,正文使用此权重表示可读性:
Objective-C的:
BOOL hasBoldText = ![[UIFont preferredFontForTextStyle:UIFontTextStyleBody].fontName hasSuffix:@"-Regular"];
Run Code Online (Sandbox Code Playgroud)
迅速:
let hasBoldText = !UIFont.preferredFontForTextStyle(UIFontTextStyleBody).fontName.hasSuffix("-Regular")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4170 次 |
| 最近记录: |