【问题标题】:Instantiating view frame so that it fits with navigation bar / tab bar?实例化视图框架以使其适合导航栏/标签栏?
【发布时间】:2017-11-16 12:10:38
【问题描述】:

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

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

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)))

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

【问题讨论】:

  • Apple 规定的布局方式称为自动布局。这与大小类、特征集合和动态字体大小相结合,称为自适应布局。这些都不使用框架 - 它适用于所有尺寸的 iOS 设备。
  • 我知道自动布局是如何工作的,但是当初始化对象时你不能这样做......你需要为视图控制器视图的手动初始化定义一个框架
  • 强制使用框架时只需使用CGRect.zero。我就是做这个的。 (编辑:刚刚看到你的答案。很高兴你找到了!)

标签: ios swift uiview frame


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 一般可以用self.view.frame调用。这取决于您是在视图控制器中还是在其他东西中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多