Как узнать точный фрейм представления UIViewController?

Когда можно узнать точный размер представления UIViewController ?

Проблема

У меня есть многострочный UILabel , чей фрейм зависит от его текста и ширины родительского представления. Учитывая, что мне нужно расположить другие представления ниже UILabel , важно, чтобы его фрейм покрывал точно пространство текста.

В настоящее время я вычисляю размер, подобный этому, на viewDidLoad :

labelSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(self.view.frame.size.width, MAX_HEIGHT)];

Проблема в том, что ширина родительского представления изменяется, когда UIViewController используется как лист модальной формы или поповер. Если я использую autoresizingMask , рамка UILabel корректируется соответствующим образом, но она больше не соответствует тексту.

Где я могу вычислить рамку этой UILabel , зная точный размер представления UIViewController?

Debugging Efforts

Это результат печати 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"];
}
5
задан hpique 16 August 2011 в 11:36
поделиться