UINavigationItem提示问题

Ins*_*ame 7 prompt uinavigationitem ios ios7

我对UINavigationItem的提示有问题,我无法解决...

我有一个主控和一个细节视图控制器.当我从主服务器推送到详细信息时,详细视图控制器上会显示一个提示:

提示

但是,当我弹回主视图控制器时,视图不会调整大小并且窗口显示(窗口显示为红色):

窗口

这只发生在iOS7上,在iOS6上,视图按预期调整大小.

我已经尝试了一些事情,例如将提示设置为nil in viewWillDisappear或者viewDidDisappear似乎没有任何解决方法.

如果我将导航控制器中的导航栏设置为半透明,它确实解决了这个问题 - 不幸的是,这不是一个选项.

我在这里创建了一个非常小的示例项目,它演示了这个问题:https://github.com/InsertWittyName/NavigationItemPrompt

在此先感谢您的帮助!

Leo*_*ica 3

我能想到的一个解决方案是对UIView主视图进行子类化,并实现viewDidMoveToSuperview将视图的框架设置为从导航栏的高度到超级视图的末尾。由于导航栏不是半透明的,您的工作会更轻松,因为您不必考虑布局指南和内容插图。

有几点需要注意。当推送和弹出时,系统将视图控制器的视图移动到动画的另一个超级视图,然后将其返回到导航控制器的私有视图层次结构。此外,当视图超出视图层次结构时,超级视图将变为nil

这是一个示例实现:

@interface LNView : UIView

@end

@implementation LNView

- (void)viewDidMoveToSuperview
{
    [super viewDidMoveToSuperview];

    if(self.superview != nil)
    {
        CGRect rect = self.superview.bounds;

        rect.origin.y += 44;
        rect.size.height -= 44;

        [self setFrame:rect];
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

这不是一个完美的实现,因为它使用导航栏高度的硬编码值,没有考虑可能的工具栏等。但是您可以将所有这些作为属性添加到此视图中,然后再开始进入viewDidLoad视图层次结构,根据需要设置参数。