【发布时间】:2011-10-09 01:53:20
【问题描述】:
我有一个非常基本的设置,在 UITabBarController 内有一个 UINavigationController。我想以编程方式布局该导航控制器的 rootViewController 的视图,但是当我查看 viewDidLoad 中的 self.view.frame 时,我得到了这个(例如,在 landscape 中):
1. view frame: {{20, 0}, {748, 1024}} // looks like an odd portrait mode
然后我自动旋转到纵向,我得到了这个:
2. view frame: {{0, 0}, {768, 911}}
然后当我回到横向时,框架现在是这样的:
3. view frame: {{0, 0}, {1024, 655}}
进一步的自动旋转事件将在帧值 #2 和 #3 之间翻转。
为了解决 #1 的怪异问题,我目前正在 viewDidLoad 中执行此操作:
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
self.view.frame = CGRectMake(0, 0, 768, 911);
} else {
self.view.frame = CGRectMake(0, 0, 1024, 655);
}
我觉得我显然在这里遗漏了一些东西。为什么视图的默认框架在自动旋转回相同方向时与框架不匹配?视图框架是否未设置为初始方向?很迷茫……
我应该提一下,包括我笨拙的 hack 在内的上述所有内容都不会在视觉上改变任何东西。我有 hack 的原因是,当我将子视图布局到此视图中时,它们将基于我期望它们的位置,即导航栏下方的左上角。
我做错了什么?
更新:关闭视图上的所有自动调整大小的东西会将结果 #1 更改为:
view frame: {{0, 0}, {748, 1024}}
这似乎有点接近,但仍然不匹配#3。
【问题讨论】:
标签: iphone ipad uiview frame viewdidload