UINavigationBar 剪辑顶部内容

Posted

技术标签:

【中文标题】UINavigationBar 剪辑顶部内容【英文标题】:UINavigationBar clips top content 【发布时间】:2014-01-11 11:49:09 【问题描述】:

我在UINavigationItem 中添加了一个自定义titleView,其中包含一个旨在位于状态栏下方的视图。它看起来很好,当我推动另一个视图控制器并在标准的从右到左动画中过渡时,它看起来很好。但是,当我[self.navigationController popViewControllerAnimated:YES] 时,它会剪辑此视图的顶部,直到动画完成。请参阅附图以获得对问题的更好解释。

只有在 pop-animation 完成后,它才会再次看起来正常。我已经尝试了我能想到的一切。在viewControllernavigationBar 的所有视图上将cropsToBounds 设置为NO。我也试过layer.masksToBounds 和几乎所有听起来很熟悉的属性。我添加了一个计时器,用于打印 navigationBar 的框架矩形和自定义 titleView,它们似乎没有改变任何东西。

有人知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

两种方法:

    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])  // if ios 7
    self.edgesForExtendedLayout = UIRectEdgeNone; //layout adjustements

或者

您需要设置视图控制器的 Delta。从实用区域(第一项)将故事板切换到 ios6.1 或更高版本。然后选择您的 Vc 视图,在实用程序区域的尺寸检查器菜单中,框架下方将有 delta 部分。每个增量之前都会有一个三角形。三角形 y 到 64(您应该使用 ios6.1 或更高版本的情节提要)。

如果您需要有关 Delta 的帮助,请访问: Interface Builder: What are the UIView's Layout iOS 6/7 Deltas for?

【讨论】:

我已经尝试在我能想到的所有视图控制器上将edgesForExtendedLayout 设置为UIRectEdgeNoneUIRectEdgeAll,没有区别。问题不是典型的状态栏重叠,因为 iOS6/7 框架变化。这是 UINavigationBar 在动画时剪辑内容。我不会在制作动画时剪辑或遮盖内容。 尝试第二个选项更好。用过 Delta 吗? Deltas 不会解决这个问题,因为它不是 iOS6 和 7 之间的区别。就像我说的,当它不处于过渡状态时它看起来很好。弹出动画完成后,橙色条的剪辑部分再次出现。我不知道 deltas 将如何解决这个问题。

以上是关于UINavigationBar 剪辑顶部内容的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar 自定义标题视图

iOS-UINavigationBar颜色设置

自定义 UINavigationBar 在顶部偏移 1 个像素

UITableView 中的顶部单元格隐藏在 UINavigationBar 后面

iOS 7 - 使 UINavigationBar 扩展到屏幕顶部

使用平移关闭 UINavigationController 调整 UINavigationBar 相对于顶部安全区域的大小