Когда можно узнать точный размер представления UIViewController
?
У меня есть многострочный UILabel
, чей фрейм зависит от его текста и ширины родительского представления. Учитывая, что мне нужно расположить другие представления ниже UILabel
, важно, чтобы его фрейм покрывал точно пространство текста.
В настоящее время я вычисляю размер, подобный этому, на viewDidLoad
:
labelSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(self.view.frame.size.width, MAX_HEIGHT)];
Проблема в том, что ширина родительского представления изменяется, когда UIViewController
используется как лист модальной формы или поповер. Если я использую autoresizingMask
, рамка UILabel корректируется соответствующим образом, но она больше не соответствует тексту.
Где я могу вычислить рамку этой UILabel
, зная точный размер представления UIViewController?
Это результат печати 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"];
}