我正在创建一个UIViewController
,其子视图的宽度与超级视图的宽度相同,超级视图的高度的一半。
以下是故事板中的内容:
这些是我在View Punkte
:
另外,我添加了“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
的宽度不正确!
这个问题的解决方案是什么?
感谢。
答案 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。