【问题标题】:iOS: layout change for accessibility font sizesiOS:可访问性字体大小的布局更改
【发布时间】:2018-05-19 16:10:23
【问题描述】:

Apple 联系人应用程序显示联系人信息屏幕,其中头像和操作按钮(消息、通话、视频、邮件)水平放置在头像下方。当用户在“设置”>“常规”>“辅助功能”>“更大的文本”>“更大的辅助功能大小”中更改字体大小时 > 选择的这些辅助功能字体之一,然后布局更改以使这些操作按钮垂直布置在头像下方。单个按钮布局更改为在图像右侧(从图像下方)显示文本。

在不为每种情况在代码中完全定义新布局的情况下,实现这一目标的最佳方法是什么。 Android 将允许为每种情况增加新的布局,但在 iOS 中,这会带来一系列问题,如Best way to change UIViewController view NIB programmatically 中所述。创建额外 ViewController 的其他选项似乎也很极端:Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape?

我可以正确检测字体大小何时处于可访问性类别和包含操作按钮的 UIStack 的翻转轴中,但由于无法以编程方式更改布局,因此我被困在那里。

【问题讨论】:

  • 根据提供的答案,在调整布局与可访问性大小方面是否仍有问题?

标签: ios autolayout user-controls accessibility dynamic-type-feature


【解决方案1】:

我自己也遇到了同样的情况,下面是我采取的方法:

  1. 尽可能使用UIStackView。这非常有用,稍后您将看到。
  2. 传统上,以上将是非无障碍布局的水平布局。如果它们是您的设计要求的垂直布局,那也没关系。
  3. 为了检测可访问性内容模式,我使用了以下 sn-p:

    BOOL isAccessibilityType = [[[UIApplication sharedApplication] preferredContentSizeCategory] containsString:@"Accessibility"];
    

请注意,如果 Apple 在以后的更新中更改这些变量的 NSString 值,上述内容可能会中断。您还可以将上述内容包装在 C 样式函数中。

  1. 根据上面的输出,您可以确定UIStackView 布局应该是垂直的还是水平的。对于可访问性模式,使用垂直,对于非可访问性模式,使用水平。保持垂直布局不变。

  2. 如果您使用的是动态类型,您可以通过调整字体粗细来更进一步。要平衡文本,您可以将粗体文本设为半粗体、将半粗体文本设为中等。但这是非常情境化的。

  3. 观察UIContentSizeCategoryDidChangeNotification 通知以了解用户的首选内容大小何时发生变化并相应地调整您的界面。

如果您已经在使用 UIStackViews,那么您已经为您完成了所有设置。如果没有,您将必须确定使用它们或其他机制来更新布局的策略。

我希望我的回答可以帮助您或引导您朝着正确的方向前进。

编辑: 也许我没有完全阅读你的问题。对于那个很抱歉。

我可以正确检测字体大小何时处于可访问性类别和包含操作按钮的 UIStack 的翻转轴中,但由于无法以编程方式更改布局,因此我被困在那里。

UIStackView 上设置正确的轴后,您需要执行以下操作:

[stackView setNeedsUpdateConstraints];  
[stackView layoutIfNeeded];

【讨论】:

    【解决方案2】:

    您可能会在WWDC 2017 : Building Apps with Dynamic Type视频中找到答案,其内容完美总结here

    当您检测到涉及可访问性大小时,您应该在UITraitEnvironment 协议的traitCollectionDidChange 方法中调整您的约束(iOS 11):看看example section问题How can I change items position to adapt text enlargement 解释得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-11
      • 2017-08-14
      • 2011-11-03
      • 2016-04-15
      • 2021-08-14
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多