iOS 5问题:解除模态后剪辑导航栏

时间:2011-11-24 16:10:13

标签: iphone uinavigationbar modalviewcontroller clipping ios5

我在应用程序商店中有一个不错的小应用程序,它本身也很好用。直到iOS 5来到城镇,人生才好。现在,我的应用程序存在许多问题,我无法修复,因为我不知道发生了什么,因为我觉得它们是iOS 5问题,而不是我的问题。

我错过了iOS 5转换手册吗?或者他们只是为了好玩而改变一切,并希望我们找出所有复活节彩蛋的位置?

这是我遇到的另一个问题(我已经浪费了太多时间来修复),当我只是说我想在良好的情况下运行应用程序时,它并不存在... 4.2:

模态视图

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

如何解决此问题?

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

所以这就是你做的:

更改此方法:

presentModalViewController:animated:

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

presentViewController:animated:completion:

具体取决于您是否使用dismissModalViewControllerAnimated:来关闭视图,请将其更改为dismissViewControllerAnimated:completion

这个方法也有完成处理程序,这对于在显示/解除视图后做一些额外的工作非常有用。也许这也有助于你的另一个问题。如果这可能有帮助,请告诉我。

答案 2 :(得分:1)

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

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

(那是从记忆中来的,所以我不能保证每一个都是点缀的,每一个都是我的。)

答案 3 :(得分:1)

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

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

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

我认为问题已得到解决,但事实并非如此。在仔细检查代码之后,清理构建并重新测试它结果是shouldAutorotateToInterfaceOrientation,在应用程序加载时,在短时间内(flag == NO)会返回所有方向的NO (根控制器)。您希望至少将YES返回到一个方向,如下所示:

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