什么情况下可以知道UIViewController
的视图的确切大小?
问题
我有一个多行的UILabel
,其框架取决于其文本和父视图的宽度。鉴于我需要将其他视图放置在UILabel
下面,因此将其框架准确地覆盖文本所占用的空间非常重要。
我当前是这样计算大小的:viewDidLoad
:
labelSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(self.view.frame.size.width, MAX_HEIGHT)];
问题在于,当
UIViewController
被用作模态表单或弹出窗口时,父视图的宽度会发生变化。如果使用autoresizingMask
,则UILabel
的框架会相应地调整,但它不再完全适合文本。在知道
UIViewController
视图的确切大小的情况下,我该在哪里计算这个UILabel
的框架?调试工作
打印
self.view.frame
的结果,当将UIViewController
显示为模态表单(UIModalPresentationFormSheet
)时,如下所示:viewDidLoad: (0.000000;0.000000;320.000000;480.000000)
viewWillAppear: (0.000000;0.000000;768.000000;960.000000)
afterDelay: (0.000000;0.000000;540.000000;576.000000)
生成上述输出的代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
[Utils logFrame:self.view.frame tag:@"viewDidLoad"];
}
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[Utils logFrame:self.view.frame tag:@"viewWillAppear"];
[self performSelector:@selector(afterDelay) withObject:nil afterDelay:0.1];
}
- (void) afterDelay {
[Utils logFrame:self.view.frame tag:@"afterDelay"];
}