【问题标题】:iOS 5 issues: Navigation bar clipped after dismissing modaliOS 5 问题:导航栏在关闭模式后被剪裁
【发布时间】:2012-01-05 18:53:27
【问题描述】:

我在应用商店上有一个不错的小应用,它本身就很好用。在 iOS 5 出现之前,生活是美好的。现在,我的应用程序出现了一些我无法修复的问题,因为我不知道发生了什么,因为我觉得它们是 iOS 5 的问题,而不是我的。

有没有我错过的 iOS 5 转换手册?还是他们只是为了好玩而改变一切,想让我们弄清楚所有复活节彩蛋在哪里?

这是我遇到的另一个问题(我浪费了这么多时间试图解决),当我只是说我想以良好的 ol' 4.2 运行应用程序时根本不存在:

模态视图

我的应用是一个简单的阅读器应用。我有一个书籍阅读视图,它使用 UIWebView 显示文本。我一直在研究的功能之一是能够在阅读时做笔记。这是通过点击按钮并呈现模态视图来实现的。是的,模态视图。你可以做的最简单的 iOS 5 之前的事情。现在,当我关闭我的模态视图时,只需点击取消,然后简单地关闭视图,当我回到我的阅读器视图时,顶部的导航栏被推到屏幕的一半!这在 4.2 中不会发生,但在 iOS 5 中会发生!

我可以做些什么来解决这个问题?

感谢您的帮助。

【问题讨论】:

标签: iphone uinavigationbar modalviewcontroller clipping ios5


【解决方案1】:

我觉得这与您呈现和关闭模态视图的方式有关。 Apple 引入了一种新方法来呈现视图。您可以尝试使用这些而不是旧的,看看它是否能解决您的问题。

这就是你要做的:

改变这个方法:

presentModalViewController:animated:

进入 iOS 5 引入的新首选方法:

presentViewController:animated:completion:

根据您是否使用dismissModalViewControllerAnimated:关闭您的视图,将其更改为dismissViewControllerAnimated:completion

这个方法也有完成处理程序,这对于在视图被呈现/关闭后做一些额外的工作非常有用。也许这也有助于解决您的其他问题。让我知道这是否有帮助。

【讨论】:

  • 嘿 d.,非常感谢您的回答。我继续更新了我的 present/dismiss 方法(以 nil 作为块),不幸的是它没有解决任何问题。我需要跑一个街区吗?我应该在里面做什么?谢谢!
【解决方案2】:

iOS 5 的一个主要变化是 UIViewController 的 navigationController 属性不再为模态视图设置。相反,有一个新的(iOS 4 中不存在)parentViewController 属性。因此,当您在模态视图中使用 navigationController 时,您需要将逻辑更改为:

UIViewController* parent;
if ([self respondsToSelector:@selector(parentViewController)]) {
    parent = self.parentViewController;
}
else {
    parent = self.navigationController;
}

(那是凭记忆,所以我不能保证每个t都是点,每个i都交叉。)

【讨论】:

  • 感谢热舔。我不知道变化。我对需要使用上述代码的上下文有点困惑。我没有调用 [self presentView...],而是插入您的代码并调用 [parent presentView...]?感谢您的帮助,我真的很想解决这些问题。
  • 不,基本上任何你提到“navigationController”的地方都可以插入上面的内容。如果您不使用 UIViewController 的“navigationController”属性,则上述内容不适用(尽管 UI 中肯定还有其他一些重大变化)。 (值得查看 release notes 以了解 Apple 实际记录的 10% 的更改。)
【解决方案3】:

好的,我只是能够弄清楚大火中发生了什么。我将 shouldAutorotateToInterfaceOrientation 值设置为 BOOL 变量,这样当 modalView 返回时,它不知道状态栏的状态/大小。解决了这个问题,问题就消失了。

【讨论】:

  • 怎么样?您在每个 shouldAutorotateToInterfaceOrientation 上都返回 YES?
【解决方案4】:

我也看到了同样的剪裁问题。

我发现问题的原因是我在模式对话框中设置了内容大小(我为 iPad 布局所做的),因此删除这两行似乎可以解决问题:

CGSize 大小 = CGSizeMake(320, 480);
self.contentSizeForViewInPopover = 大小;

我以为问题已解决,但事实并非如此。在再次查看代码、清理构建并重新测试后,结果是 shouldAutorotateToInterfaceOrientation 在加载应用程序(根控制器)时会在短时间内(flag == NO)对所有方向返回 NO .您至少希望像这样将 YES 返回到一个方向:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return !self.flag ? UIInterfaceOrientationPortrait == toInterfaceOrientation : YES;
}

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多