我正在为我的应用使用xCode 6和尺寸类。
我遇到了一个我不明白的非常奇怪的问题。
我在UIViewController中约束了UIView,我为Any x Any(150x150)大小的classe设置了宽度约束,为Regular x Regular(300x300)设置了另一个widh约束。
当我记录我的UIView的大小时,当应用程序在iPad上运行时,我遇到了问题。
确实,在" viewWillAppear" " viewWillLayoutSubviews"或" viewDidLayoutSubviews"我得到的尺寸" 150x150"而不是" 300x300"。
我的日志:
- (void) viewWillAppear:(BOOL)animated {
NSLog(@"viewWillAppear Size %f - %f",
self.myView.frame.size.width, self.myView.frame.size.height);
}
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
NSLog(@"viewDidAppear Size %f - %f",
self.myView.frame.size.width, self.myView.frame.size.height);
}
- (void) viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
NSLog(@"viewWillLayoutSubviews Size %f - %f",
self.myView.frame.size.width, self.myView.frame.size.height);
}
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"viewDidLayoutSubviews Size %f - %f",
self.myView.frame.size.width, self.myView.frame.size.height);
}
我不明白的是,日志显示:
2015-02-17 09:29:38.984 myApp[660:42565] viewDidLoad Size
150.000000 - 150.000000
2015-02-17 09:29:38.985 myApp[660:42565] viewWillAppear Size
150.000000 - 150.000000
2015-02-17 09:29:39.047 myApp[660:42565] viewWillLayoutSubviews
Size 150.000000 - 150.000000
2015-02-17 09:29:39.058 myApp[660:42565] viewDidLayoutSubviews
Size 150.000000 - 150.000000
2015-02-17 09:29:39.063 myApp[660:42565] viewWillLayoutSubviews
Size 230.000000 - 230.000000
2015-02-17 09:29:39.063 myApp[660:42565] viewDidLayoutSubviews
Size 230.000000 - 230.000000
2015-02-17 09:29:39.586 myApp[660:42565] viewDidAppear Size
230.000000 - 230.000000
2015-02-17 09:29:39.591 myApp[660:42565] viewWillLayoutSubviews
Size 230.000000 - 230.000000
2015-02-17 09:29:39.593 myApp[660:42565] viewDidLayoutSubviews
Size 230.000000 - 230.000000
那么发生了什么?为什么我第一次得到Any x Any size class的大小?为什么这些方法被多次调用?
我在viewDidAppear中看到了正确的帧大小,但我不喜欢它,因为有一个延迟beforc这个函数被调用。 (我需要先用我的视图的帧大小做一些事情来展示它......)
答案 0 :(得分:1)
"临时" (但美丽的废话:D)解决方案:
在viewDidLoad中我添加了:
if(UIDEVICE == IPAD) {
[self.view layoutIfNeeded];
}
有了这个,我有正确的帧大小,但我想了解我的代码,大小类等的问题是什么...... :(
答案 1 :(得分:0)
如果您想在- (void) viewWillAppear:(BOOL)animated
尝试以下方式之前根据自动布局调整UIView的大小。
- (void) viewWillAppear:(BOOL)animated {
[self.view layoutIfNeeded];
[self.myView layoutIfNeeded];
NSLog(@"viewWillAppear Size %f - %f",
self.myView.frame.size.width, self.myView.frame.size.height);
}