【问题标题】:self.view.frame.size.height returns 568 on iphone 4s instead of 480self.view.frame.size.height 在 iphone 4s 上返回 568 而不是 480
【发布时间】:2014-05-08 22:01:24
【问题描述】:

viewDidLoad 方法中,我调用视图控制器self.view.frame.size.height,它返回568。但[[UIScreen mainScreen] bounds].size.height 返回480。视图的框架大小不应该总是小于窗口大小吗?

我在 iphone 4s 上进行测试。我尝试将子视图的长度设置为[[UIScreen mainScreen] bounds].size.height,但不足以覆盖屏幕。然后我检查了self.view.frame.size.height 的大小,这就是我遇到 568 的原因,这对我来说还没有任何意义。

【问题讨论】:

  • 你用哪种方法检查高度?视图控制器是如何创建的?你的布局限制是什么?
  • 我在包含控制器的 ViewDidLoad 中调用这些操作。

标签: objective-c ios7


【解决方案1】:

viewDidLayoutSubviews 将返回正确的高度。

即在视图层次结构方法viewDidLayoutSubviews中调用self.view.frame.size.height

【讨论】:

  • 为了让它工作,我不得不从 viewDidLayoutSubviews 调用 [self.view layoutIfNeeded]
  • 请注意 viewDidLayoutSubviews 将为 每个 添加的子视图调用。换句话说,它可以被多次调用,所以考虑不要在那里放重的东西。 viewWillAppear 可能是一个更好的地方。
  • viewWillAppear 没有设置正确的框架布局。它不能用于此目的。但是你没有在 didLayoutsubviews 中添加超出你需要的内容是正确的。
【解决方案2】:

viewDidLoad 中,视图没有最终大小。通常,它们的大小取自 XIB/Storyboard。

例如,如果您为 i5 设计 xib,则控制器视图将在 viewDidLoad 中高 568 像素。但是,在它出现在屏幕上之前,会计算一个新的布局(取决于您的自动布局约束或自动调整掩码)。

解决您的问题 - 切勿使用屏幕高度。如果要覆盖整个控制器,请改用其高度self.view.frame.size.height

也不要忘记添加约束或设置自动调整掩码。

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 2014-11-04
    • 2016-05-04
    • 1970-01-01
    • 2015-02-11
    • 2013-03-21
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多