Авто-изменение размера динамического представления при повороте - PullRequest
1 голос
/ 13 сентября 2011

У меня есть приложение панели вкладок, где все работает нормально.У меня есть ротации устройства, все работает нормально с различными контроллерами Tab Bar View.

Увы, было предложено, чтобы пара контроллеров представления нуждалась в странице справки.С этой целью я создал новый ViewController, который содержит UIWebView (где справка может быть встроена в файл HTML).

Я создаю новый «HelpViewController» следующим образом:

mpHelpPage     = [[HelpPageViewController alloc] init];
[mTabBarController.view addSubview: mpHelpPage.view];
[mpHelpPage retain];

mpHelpPage.view.alpha = 0.75f;

Thisвызывает страницу справки без проблем, когда я в режиме портрета.К сожалению, когда я нахожусь в ландшафтном режиме и я делаю приведенный выше код, он добавляет HelpViewController в Portrait (это означает, что он расширяется от нижней части экрана).

Таким образом, когда я размещаю ViewController выше, мне нужен какой-то способсказать ViewController, чтобы он повернулся к текущей ориентации устройства.

Однако, я в растерянности относительно того, как заставить это сделать это.Любая помощь будет высоко ценится!

Ответы [ 3 ]

3 голосов
/ 13 сентября 2011

Я справляюсь с этим раздражением, помещая проверку ориентации в viewWillAppear:, например,

if (self.interfaceOrientation == UIInterfaceOrientationPortrait || 
    self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    // custom code or call willRotate
} else {
    // custom code or call willRotate
}    

Вы также можете сделать это, если предпочитаете

if (UIDeviceOrientationIsPortrait(self.interfaceOrientation)) {
    // custom code or call willRotate
} else {
    // custom code or call willRotate
}    
2 голосов
/ 13 сентября 2011

Вы должны либо установить frame -поддержку вашего подпредставления в willRotateToInterfaceOrientation:duration: вашего ViewController

или вы пишете свой собственный View и устанавливаете свойство frame в layoutSubviews вашего View

Добавленное подпредставление должно обрабатывать макет своих подпредставлений.

1 голос
/ 13 сентября 2011

Поскольку вы добавили HelpViewController в качестве подпредставления, а UIViewController не контролирует его, оно не будет изменено.Вы можете изменить размер вида HelpViewController вручную, обнаружив изменение ориентации в методе shouldAutorotateToInterfaceOrientation: текущего UIViewController.Этот метод передает текущую ориентацию в качестве аргумента, поэтому просто проверьте текущую ориентацию и установите соответствующий кадр следующим образом:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if((interfaceOrientation==UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation==UIInterfaceOrientationLandscapeRight))
        mpHelpPage.view.frame = CGRectMake(0,0,480,300);
    else
        mpHelpPage.view.frame = CGRectMake(0,0,320,460);
    return YES;
}

Или, вместо добавления HelpViewController в качестве подпросмотра, попробуйте [self.navigationController pushViewController:HelpViewController animated:YES];

...