UINavigationController неправильно загружает представление из-за ориентации / встряхивания

Фон: приложение имеет функцию встряхивания, чтобы вернуться домой. Домашний вид Поддерживает только портретную ориентацию. Если вы встряхнетесь немного сильнее, чем обычно, представление, в котором вы находитесь, начнет вращаться (это нормально), но затем оно обнаружит дрожание и выполнит popViewControlller для домашнего представления. Когда он это делает, он отлично загружает контроллер навигации, но представление под (домашним содержимым) загружается за панель и растягивается (в основном оно загружается под панелью навигации, поэтому оно растягивается вверх)

кнопка прекрасно справляется с этим из ландшафта в портрет (так как это не промежуточные переходы)

Как мне обрабатывать это изменение ориентации (из-за встряхивания), чтобы я мог вернуться в корневой контроллер представления, без загрузки представления под Панель навигации?

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

добавлена ​​награда в размере 50.

Править Вот как я обнаруживаю встряски и треск

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{

    if ( event.subtype == UIEventSubtypeMotionShake )
    {

            UINavigationController *navController = self.navigationController;

            [[self retain] autorelease];
            HomeViewController *home = [[HomeViewController alloc]init];
            [navController popViewControllerAnimated:YES];

            home.title =@"Home View Controller";
            [home release];     
        }

    if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
        [super motionEnded:motion withEvent:event];
}

Вот мой делегат приложения:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    navController = [[UINavigationController alloc]init];
    [self.window addSubview:navController.view];

    HomeViewController *home = [[HomeViewController alloc]init];
    [[self home] setFrame:[[UIScreen mainScreen] applicationFrame]];

Я добавлю сюда макет .

Нормальный вид:

Normal View

Растянутый вид после встряхивания / хлопка:

Streched

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}
6
задан Sum 27 July 2011 в 02:14
поделиться