多次使用iOS7中的动画NO进行推入和弹出后,NavigationBar表现异常

5

在iOS7 iPhone中,通过编程方式对UINavigationController执行多个pop和push操作时,不带动画会出现问题。

源代码 https://github.com/abhishek9284/NavigationBarTest

为了理解问题,请考虑以下视图树。
(我在我的应用程序中使用UITableViewController)
右键单击并选择在新标签页中打开图像以查看大图。 enter image description here

错误信息
右键单击并选择在新标签页中打开图像以查看大图。 enter image description here

在执行以下导航时会出现Bug/Problem。

  1. 手动逐一推送视图并转到D视图。
    (PUSH:根 > 字母表 > A > B > C > D)
  2. 使用popToViewController编程地一次性弹出多个视图,并返回根视图
    (POP:根 < 字母表 < A < B < C < D)
  3. 编程推送并转到第2个视图
    (PUSH:根 > 数字 > 1 > 2)

在上述步骤2和3中,使用无动画编程完成了弹出和推送,这使得UINavigationBar的返回按钮和标题非常奇怪。

注意:上述问题仅在iOS 7中发生,在iOS 6中完美运行。


我不清楚问题具体是什么。 - nhgrif
你能上传一张奇怪的图片吗? - JuJoDi
1
@nhgrif 添加了代码链接和应用程序图片以便更好地理解。 - Abhishek Panchal
1
@JuJoDi 添加了代码链接和应用程序图片以便更好地理解。 - Abhishek Panchal
2个回答

3

★☆★ 解决 ★☆★

问题原因

  • -(void)viewDidAppear:(BOOL)animated 方法中执行push或pop操作会导致导航栈不稳定。

解决方案

  • 创建与push或pop相关的单独方法,并从另一个视图控制器中调用该方法 (避免在-(void)viewDidAppear:(BOOL)animated中进行push或pop操作)

  • 在push操作后调用方法 [self.navigationController.view layoutSubviews]; 来布置子视图。


1

为了技术准确性,不应直接调用layoutSubviews,尽管它确实可行。请参阅苹果文档以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接