当 UINavigation 的 Translucent 设置为 false 时,视图约束发生变化

Posted

技术标签:

【中文标题】当 UINavigation 的 Translucent 设置为 false 时,视图约束发生变化【英文标题】:View constraints change when UINavigation's Translucent is set to false 【发布时间】:2017-03-03 07:23:09 【问题描述】:

当将 UINavigationBar 的 Translucent 属性设置为 false/(在 storyBoard 中未选中)。约束没有按预期工作。

ViewController 的功能:自定义相机模块,在 UIView 上显示相机预览。

查看层次结构

ViewController 的 View

PreviewView (UIView) 用于显示相机预览。 PreviewView 和 View 之间的约束如下。

当 UINavigationBar 半透明时

如您所见,约束设置为与超级视图相等的宽度和高度,但结果不一样。屏幕截图是横向/iPad,但即使是纵向,结果也是一样的。

当 UINavigationBar 为半透明时

另一方面,当 UINavigationBar 是半透明的时,约束可以正常工作。

【问题讨论】:

你是怎么解决这个问题的? 【参考方案1】:

请检查此 Select View Controller -> IB Inspector -> (Extend Edges) -> Under Top Bars 请取消选择并尝试。

【讨论】:

【参考方案2】:

对我也不起作用。

将导航栏更改为 isTranslucent = true 会更改视图布局。如果 isTranslucent == false,视图 origin.y 位于 0.0(在屏幕顶部),但如果 isTranslucent == true,则视图 origin.y 位于(导航栏高度),这意味着视图从导航栏下方开始。视图高度相应降低。

为什么会这样?

我的解决方法是调整布局代码以适应这种变化,但视觉变化会导致这种行为似乎很奇怪。

【讨论】:

我猜这是因为当导航栏是半透明的时视图被放在导航栏下,所以导航栏有一些东西可以通过半透明显示。

以上是关于当 UINavigation 的 Translucent 设置为 false 时,视图约束发生变化的主要内容,如果未能解决你的问题,请参考以下文章

应用程序的 ios 11 颜色(uinavigation)

IOS Swift CNContactViewController 导航栏不显示 UINavigation 控制器

UINavigationController  和 UITabBarController

关闭 UIAlertController 时调用 UINavigation 的 dismissViewControllerAnimated 方法

设置 UINavigation 控制器和各种视图加载

UINavigation 后退栏按钮