ОК. Я знаю, что это старый вопрос, но именно так я и решил эту проблему.
В моей ситуации у меня была раскадровка с видом, который отображался бы либо в портретном, либо в альбомном режиме в зависимости отпользовательский параметр.
Мое приложение всегда отображает строку состояния, кроме случаев, когда я показываю это представление.
Чтобы все это работало, преобразования должны были применяться в методе viewWillAppearдля одного.Сначала у меня был следующий код в методе viewDidAppear, и я думаю, что он перепутался с границами для события touchesBegan.
Вот код viewWillAppear:
- (void)viewWillAppear:(BOOL)animated
{
// Hide the status bar
[[UIApplication sharedApplication] setStatusBarHidden:YES];
// This is to offset the frame so that the view will take the fullscreen once the status bar is hidden
self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);
// If view is to be displayed in landscape mode
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"orientation"])
{
// Change status bar orientation
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft];
// Turn the view 90 degrees
[self.navigationController.view setTransform:CGAffineTransformMakeRotation(M_PI/2)];
// Set the frame and the bounds for the view
// Please Note: Frame size has to be reversed for some reason.
[self.navigationController.view setFrame: CGRectMake(0,0,320,480)];
[self.navigationController.view setBounds: CGRectMake(0,0,480,320)];
// Make sure user can interact with view
[self.navigationController.view setUserInteractionEnabled:YES];
}
}
Любая другая вещь, которая должна быласлучиться с макетом, должно произойти в методе viewDidAppear.Например, у меня было изображение, которое покрывало весь вид, и рамка должна была быть установлена в зависимости от ориентации.Установка фрейма в viewWillAppear дала странные результаты, но тот же код прекрасно работал в viewDidAppear.
Надеюсь, это кому-нибудь поможет, когда я в течение 6 часов ударился об эту вещь.