实例化视图框架以使其适合导航栏/标签栏?

Instantiating view frame so that it fits with navigation bar / tab bar?

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

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

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方法中,将布局约束应用于视图class以将其映射到self.view