当 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 Swift CNContactViewController 导航栏不显示 UINavigation 控制器
UINavigationController 和 UITabBarController
关闭 UIAlertController 时调用 UINavigation 的 dismissViewControllerAnimated 方法