Неверный размер кадра в viewdidload, viewdidappear
Используя iOS8. Размер кадра UIViewController's
представление неверно в viewDidLoad
а также viewDidAppear
, Я мог бы получить правильный размер кадра из viewDidLayoutSubviews
и выполнять обновления вида (мне нужно сделать макет недействительным), но потом обрабатывать ротацию viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
становится бессмысленным, и 2 метода изгоняют его.
в идеале willTransitionToSize
будет называться и не didLayoutSubviews
, но не оба, потому что я не знаю, действительно ли мне нужно аннулировать макет и выполнять бессмысленные вычисления, макет и т. д.
Я хочу избежать использования всевозможных волшебных флагов, относящихся к поворотам и изменениям размера кадра.
Есть ли способ получить "истинный" размер представления контроллера представления, прежде чем это произойдет?
РЕДАКТИРОВАТЬ
Вот пример кода:
-(void)viewDidLoad {
[super viewDidLoad];
NSLog(@"My Frame = %@",NSStringFromCGRect(self.view.frame)); // prints 320x568 i.e. the whole screen
// more setup code...
self.someView = [SomeClass alloc] initWithFrame:self.view.bounds];
self.someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
// add some more views and masks
}
-(void)viewDidAppear {
[super viewDidAppear];
NSLog(@"My Frame = %@",NSStringFromCGRect(self.view.frame)); // prints 320x568 i.e. the whole screen
// view "sticks" out the bottom of the screen still - don't know if I need to layout "self.someView". I could add "viewWillLayoutSubviews" but than rotation wouldn't be animated - because I wouldn't know which condition to take...
}
// if the view controller rotates than need to update appearance in a nice animated way
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[self updateAppearance];
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
}];
}