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的包含操作按钮的翻转轴时,但如果没有以编程方式更改布局,我就会卡在那里。
答案 0 :(得分:0)
我自己遇到了同样的情况,接下来是我采取的方法:
UIStackView
。这非常有用,您稍后会看到。 要检测辅助功能内容模式,我使用以下代码段:
BOOL isAccessibilityType = [[[UIApplication sharedApplication] preferredContentSizeCategory] containsString:@"Accessibility"];
请注意,如果Apple在将来的更新中更改这些变量的NSString值,则上述情况可能会中断。您还可以将上述内容包装在C样式函数中。
根据上面的输出,您可以确定UIStackView
布局是垂直还是水平。对于辅助功能模式,使用垂直模式,对于非辅助功能模式,请使用水平模式。保持垂直布局不变。
如果您使用的是动态类型,则可以通过调整字体粗细来更进一步。要平衡文本,可以使用粗体文本半粗体,半粗体文本等。但这是非常情景化的。
观察UIContentSizeCategoryDidChangeNotification
通知,了解用户首选内容大小何时发生变化,并相应调整界面。
如果您已经在使用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
的问题得到了很好的解释。