iOS:可访问性字体大小的布局更改

时间:2017-12-05 21:40:27

标签: ios user-controls autolayout accessibility user-experience

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

如果没有在每个案例的代码中完全定义新布局,那么实现此目标的最佳方法是什么。 Android会允许为每个案例扩展新的布局,但在iOS中,这会出现Best way to change UIViewController view NIB programmatically中列出的一堆问题。创建其他ViewControllers的其他选项似乎也很极端:Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape?

我可以正确检测字体大小是否在辅助功能类别和UIStack的包含操作按钮的翻转轴时,但如果没有以编程方式更改布局,我就会卡在那里。

2 个答案:

答案 0 :(得分:0)

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

  1. 尽可能使用UIStackView。这非常有用,您稍后会看到。
  2. 传统上,上面将是非可访问性布局的水平布局。如果它们是您设计所需的垂直布局,那也没关系。
  3. 要检测辅助功能内容模式,我使用以下代码段:

    BOOL isAccessibilityType = [[[UIApplication sharedApplication] preferredContentSizeCategory] containsString:@"Accessibility"];
    
  4. 请注意,如果Apple在将来的更新中更改这些变量的NSString值,则上述情况可能会中断。您还可以将上述内容包装在C样式函数中。

    1. 根据上面的输出,您可以确定UIStackView布局是垂直还是水平。对于辅助功能模式,使用垂直模式,对于非辅助功能模式,请使用水平模式。保持垂直布局不变。

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

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

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

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

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

        

      我可以正确检测字体大小是否在辅助功能类别和UIStack的包含操作按钮的翻转轴时,但如果没有以编程方式更改布局,我就会卡在那里。

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

      [stackView setNeedsUpdateConstraints];  
      [stackView layoutIfNeeded];
      

答案 1 :(得分:0)

您可能会在WWDC 2017 : Building Apps with Dynamic Type视频中找到答案,这些视频的内容被完美地概括了here

看看example section,其中How can I change items position to adapt text enlargement的问题得到了很好的解释。