Подпредставление не изменяет размер автоматически при добавлении в контроллер корневого представления

У меня есть контроллер корневого представления, который будет иметь до 10 или около того подпредставлений. Я реализую автоповорот / автоповорот во всем приложении.

Моя проблема заключается в следующем: - Когда я выделяю все контроллеры представлений и добавляю каждый в качестве подпредставления к корневому контроллеру во время запуска, все работает так, как должно. Единственная проблема в том, что каждому контроллеру представления нужно время для инициализации. Это приводит к очень медленной загрузке моего приложения.

  • Вместо этого я пытаюсь выделить контроллеры представления по мере необходимости. Теперь я обнаружил, что если приложение переходит в альбомную ориентацию, и я выделяю контроллер представления, который разработан в портретной ориентации, он автоматически поворачивается, но автоматического изменения размера не происходит.

  • Другими словами, как только подпредставление добавляется к корневому контроллеру в портретном режиме, оно правильно поворачивается и изменяется (и остается таким). Если subview добавляется, когда корневой контроллер находится в альбомной ориентации, он вращается, но не автоматически масштабируется (и размеры просмотра остаются испорченными, вращаясь обратно в портретную ориентацию)

  • Я попытался вызвать автоматическое изменение размера, вызвав SetNeedsLayout, SetNeedsDisplay и LayoutIfNeeded, но ничего не работает. Я знаю, что, вероятно, я мог бы сделать это вручную, определив ориентацию корневых контроллеров и соответствующим образом изменив размер вложенных представлений, но это большая работа для того, что должно работать автоматически.

  • Я что-то упускаю? Любая помощь будет оценена. Мой проект - это порт для iPad из приложения для iPhone, приложение для iPhone не вращается, поэтому я не уверен, что это может быть что-то не так с бета-версией 3.2.


person Per    schedule 07.04.2010    source источник


Ответы (1)


После некоторой борьбы с этим я добавил следующий код в свое subview. Он выполняется после добавления представления в корневой контроллер представления. Пока вроде работает.

-

(void) AdjustFrame{
 UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
 if((interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight))
 {
  CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
  CGRect newFrame =  CGRectMake(0.0, 0.0, applicationFrame.size.height, applicationFrame.size.width);
  [self.view setFrame:newFrame];
  [self.view setNeedsDisplay];


 }   
}
person Per Brown    schedule 09.04.2010
comment
Хотел бы я найти это пару дней назад, когда у меня была аналогичная проблема. Вот мой вопрос / ответ (очень похожий на ваш): stackoverflow.com/questions/2659400/ - person Kristopher Johnson; 20.04.2010