iOS - UIView子视图的大小与超级视图不同

时间:2016-03-11 15:14:13

标签: ios xcode uiview constraints

我正在创建一个UIViewController,其子视图的宽度与超级视图的宽度相同,超级视图的高度的一半。

以下是故事板中的内容:

Views

这些是我在View Punkte

中添加的约束

Constraints

另外,我添加了“Equal Height”约束。

约束正常工作。旋转设备时,子视图保持不变。 但问题是框架尺寸。

当我打印两个视图的大小时,这就是Xcode返回的内容(代码在ViewDidLoad内:

print(self.view.bounds) // returns --> (0.0, 0.0, 375.0, 667.0)
print(viewPunkte.bounds) // returns --> (0.0, 0.0, 600.0, 300.0)

为什么会这样? viewPunkte的宽度不正确! 这个问题的解决方案是什么?

感谢。

3 个答案:

答案 0 :(得分:2)

如果您在viewDidLoad期间检查视图的框架,那么在视图初始化之后但在完成布局过程之前,您可能正在这样做。您的控制器视图尚未添加到窗口中,您不应该假设任何视图的框架反映了它们的最终尺寸。

考虑为什么您认为此时需要检查视图帧。

答案 1 :(得分:0)

通常,故事板中视图控制器视图的大小不等于模拟器。它在故事板中是方形的,但iOS设备不是方形的。

您似乎在iPhone / iPhone模拟器中运行项目

因此:

self.view.bounds = iPhone屏幕尺寸(pt)=(375.0,667.0)

并设置了' viewPunkte'的高度和宽度约束,它们等于常量300& 600。

这就是为什么viewPunkte的大小总是等于(600.0,300.0)

答案 2 :(得分:0)

您可以使用

-(void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    //NSLog dimensions.
}

这应该为您提供正确的尺寸,因为此事件意味着其视图刚刚布置了其子视图。

这是在viewdidload之后和viewDidAppear之前触发的。方向更改也可以触发viewDidLayoutSubview。