У меня есть UIView как XIB в портретном режиме.
Это представление добавляется программно к контроллеру представления следующим образом:
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"InputView" owner:self options:nil];
InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
Это представление имеет правильно настроенные маски автоматического изменения размеров и отлично вращается при изменении ориентации с книжной на альбомную.
Однако, если ориентация уже альбомная. и я создаю вид после изменения ориентации, он имеет исходную портретную ориентацию. Используя предложения occulus и Индера Кумара Ратора (спасибо, ребята!), Я изменил код на этот:
InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
[self.view setNeedsLayout];
[self.view layoutSubviews];
[self.view layoutIfNeeded];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
[self shouldAutorotateToInterfaceOrientation:orientation];
К сожалению, никаких изменений нет. Думаю, я нашел человека, задающего тот же вопрос:
Ответ правильно определяет проблему, но не очень обнадеживает ... Конечно, я мог бы создать два пера или изменить размер кадра, но это кажется противоречащим идее автоматического изменения размера. Мне трудно поверить в то, что после пробуждения и добавления его в представление невозможно определить, как использовать его функции автоматического изменения размера ... что-то, что работает безупречно, когда устройство вращается.
РЕДАКТИРОВАТЬ 2:
Решение idz работает:
InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
inputView.frame = self.view.bounds;
[inputView show];
Спасибо!