画外音:每次加载视图时,ViewWillAppear 中的 UIAccessibilityLayoutChangedNotification 都没有将焦点设置在导航栏标题上
Posted
技术标签:
【中文标题】画外音:每次加载视图时,ViewWillAppear 中的 UIAccessibilityLayoutChangedNotification 都没有将焦点设置在导航栏标题上【英文标题】:Voice over : UIAccessibilityLayoutChangedNotification in ViewWillAppear is not setting focus on Navigation bar title every time the view is loaded 【发布时间】:2018-02-22 19:05:51 【问题描述】:过去 2 天我一直在努力解决这个问题。
我有一个UITabBarController
,每个选项卡在视图中都有一个UINavigationController
。
当我加载标签栏控制器时,语音正在正确读取标签视图导航栏标题。它在第一次加载视图时起作用。(似乎这是默认行为。)但是当我再次选择选项卡时,画外音正在读取选项卡信息,但没有将焦点设置到导航栏标题。有没有办法在每次加载选项卡视图时将其设置为关注标题。
我尝试使用
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
UIAccessibilityPostNotification
(UIAccessibilityLayoutChangedNotification, self.navigationItem.titleView)
我还尝试创建一个标签作为标题视图并将其设置为NavigationItem
。
没有任何帮助。
非常感谢任何建议。
谢谢。
【问题讨论】:
【参考方案1】:在 viewDidAppear 中尝试,不在 viewWillAppear 中
- (void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.navigationItem.titleView);
);
【讨论】:
很好,这很有效。感谢您的建议。我正在使用 swift 3,所以我不得不稍微修改一下调度。 DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(30)) UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.navigationItem.titleView) 正如我之前提到的,您的回答对我有很大帮助,不幸的是,我没有足够的分数来支持您的回答。但它确实奏效了。任何寻找此答案的 swift 3 版本的人请查看我之前的评论。 @user2092512 你可以接受这个答案作为正确答案。以上是关于画外音:每次加载视图时,ViewWillAppear 中的 UIAccessibilityLayoutChangedNotification 都没有将焦点设置在导航栏标题上的主要内容,如果未能解决你的问题,请参考以下文章
每次加载视图时只能调用一次 layoutIfNeeded - 例如视图加载?