Ios 实例化图幅以使其适合导航栏/选项卡栏?

Ios 实例化图幅以使其适合导航栏/选项卡栏?,ios,swift,uiview,frame,Ios,Swift,Uiview,Frame,我有一个应用程序,其中视图有时在导航控制器中,有时不在,有时在选项卡栏和导航控制器中 我使用以下代码以编程方式创建视图: let contact = ContactFormViewController(contactFormView: ContactFormView.init(frame: UIScreen.main.bounds)) 但是,这会导致帧始终与屏幕一样大,这意味着当有导航栏或选项卡栏时,视图会被推离可见屏幕而不适合 是否有方法调整视图高度,使其始终显示在屏幕上,而不考虑导航栏或选

我有一个应用程序,其中视图有时在导航控制器中,有时不在,有时在选项卡栏和导航控制器中

我使用以下代码以编程方式创建视图:

let contact = ContactFormViewController(contactFormView: ContactFormView.init(frame: UIScreen.main.bounds))
但是,这会导致帧始终与屏幕一样大,这意味着当有导航栏或选项卡栏时,视图会被推离可见屏幕而不适合

是否有方法调整视图高度,使其始终显示在屏幕上,而不考虑导航栏或选项卡栏等父元素?或者,总是使用手动减法创建视图,这似乎很糟糕,因为它需要假定硬编码元素:

let attendees = AttendeesViewController(attendeesView: AttendeesView.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-55)))

感谢您的指导,因为这是我应用程序中的一个主要问题

我认为以UIScreen作为参考来展示您的观点是错误的。我认为您应该使用内容视图(层次结构顶部的视图)作为参考。

解决方案是将框架设置为
CGRect.zero
,然后在控制器的init方法中,将布局约束应用于视图类,将其映射到
self.view

苹果指定的布局方式称为自动布局。它与大小类、特征集合和动态字体大小结合在一起,形成一个称为自适应布局的组。所有这些都不使用框架——而且它在所有大小的iOS设备中都能工作。我知道自动布局是如何工作的,但当初始化对象时,你不能这样做……你需要为视图控制器视图的手动初始化定义一个框架。当强制使用框架时,只需使用
CGRect.zero
。我就是这么做的。(编辑:刚刚看到你的答案。很高兴你找到了!)一般来说,你可以用self.view.frame来调用它。这取决于您是在视图控制器中还是在其他位置。