【发布时间】:2013-07-26 18:33:43
【问题描述】:
这是我在这里遇到的问题的延续(仍未解决):link
但这可能有助于了解问题所在。 我只创建了一个简单的测试项目(“空应用程序”)并添加了一个带有 XIB 文件的视图控制器(复选框:“选择了用于用户界面的 XIB 文件”)。代码如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"didLoad: %@",NSStringFromCGRect(self.view.bounds));
// Do any additional setup after loading the view from its nib.
}
-(void) viewDidAppear:(BOOL)animated
{
NSLog(@"didAppear: %@",NSStringFromCGRect(self.view.bounds));
}
这是输出:
2013-07-26 17:05:28.502 testtest[5926:c07] didLoad: {{0, 0}, {320, 548}}
2013-07-26 17:05:28.506 testtest[5926:c07] didAppear: {{0, 0}, {320, 460}}
他们为什么不一样?
(ps。我在 6.1 模拟器上测试)
【问题讨论】:
-
您的视图将在实际插入视图层次结构时调整大小。这会受到导航栏、状态栏、工具栏、标签栏等的影响。因此,它在 Interface Builder 中的大小(以及在 viewDidLoad 中加载的大小)在运行时会根据上下文而有所不同。
-
@Mike Weller:这是否意味着我不能依赖 viewDidLoad 中的 self.bounds 等维度?
-
完全正确。当 viewDidLoad 被调用时,你的视图控制器的视图实际上并没有被插入到视图层次结构中。
viewWillAppear:是一个更好的地方,更好的是在 UIView 子类中完成所有布局代码。 -
@Mike Weller:想象一下我只有一些自定义 UIView 子类。我想把它放在我的 ViewController 的视图上——我应该把代码放在哪里?
标签: ios objective-c cocoa-touch