首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UINavigationItem提示问题

UINavigationItem提示问题
EN

Stack Overflow用户
提问于 2014-03-01 14:50:03
回答 5查看 3.3K关注 0票数 8

我在UINavigationItem上的提示符有个问题,我无法解决.

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

但是,当我弹出主视图控制器时,视图不会调整大小,窗口会显示出来(窗口已被红色):

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

我尝试过一些事情,比如在viewWillDisappearviewDidDisappear中将提示符设置为零,但似乎没有什么可以修复它。

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

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

提前感谢您的帮助!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-03 19:00:38

我可以想到的一个解决方案是子类主视图的UIView,并实现viewDidMoveToSuperview将视图的框架设置为从导航条的高度到superview的末尾。因为导航条不是半透明的,所以您的工作更容易,因为您不需要考虑布局指南和内容嵌入。

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

下面是一个实现示例:

代码语言:javascript
复制
@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

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

票数 3
EN

Stack Overflow用户

发布于 2016-10-19 01:38:27

当用户点击后退按钮时,您可以删除提示符,如下所示

代码语言:javascript
复制
override func willMove(toParentViewController parent: UIViewController?) {
    super.willMove(toParentViewController: parent)
    if parent == nil {
        navigationItem.prompt = nil
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-11-20 06:00:44

问题是你的导航条是不透明的还是半透明的。令人遗憾的是,苹果已经让这个可恶的bug困扰了我们三年多了。

所有这些解决方案都是黑客。我的解决方案是: A)永远不要使用提示,或者B)在每个视图中使用它们,即使您必须将它们设置为"“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22115821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档