UINavigationBar 剪辑顶部内容
Posted
技术标签:
【中文标题】UINavigationBar 剪辑顶部内容【英文标题】:UINavigationBar clips top content 【发布时间】:2014-01-11 11:49:09 【问题描述】:我在UINavigationItem
中添加了一个自定义titleView
,其中包含一个旨在位于状态栏下方的视图。它看起来很好,当我推动另一个视图控制器并在标准的从右到左动画中过渡时,它看起来很好。但是,当我[self.navigationController popViewControllerAnimated:YES]
时,它会剪辑此视图的顶部,直到动画完成。请参阅附图以获得对问题的更好解释。
只有在 pop-animation 完成后,它才会再次看起来正常。我已经尝试了我能想到的一切。在viewController
和navigationBar
的所有视图上将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
设置为UIRectEdgeNone
和UIRectEdgeAll
,没有区别。问题不是典型的状态栏重叠,因为 iOS6/7 框架变化。这是 UINavigationBar 在动画时剪辑内容。我不会在制作动画时剪辑或遮盖内容。
尝试第二个选项更好。用过 Delta 吗?
Deltas 不会解决这个问题,因为它不是 iOS6 和 7 之间的区别。就像我说的,当它不处于过渡状态时它看起来很好。弹出动画完成后,橙色条的剪辑部分再次出现。我不知道 deltas 将如何解决这个问题。以上是关于UINavigationBar 剪辑顶部内容的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UINavigationBar 在顶部偏移 1 个像素
UITableView 中的顶部单元格隐藏在 UINavigationBar 后面
iOS 7 - 使 UINavigationBar 扩展到屏幕顶部
使用平移关闭 UINavigationController 调整 UINavigationBar 相对于顶部安全区域的大小