Я хочу изменить размер моей панели инструментов - PullRequest
0 голосов
/ 21 мая 2011

Я хочу изменить размер панели инструментов при изменении ориентации.Но я столкнулся с трудной проблемой.

У меня есть два контроллера вида.На первом контроллере вида есть кнопка.Когда эта кнопка коснется, на дисплее появится второй вид.Эти контроллеры представления принадлежат контроллеру навигации.

Первый контроллер представления отображает панель навигации.И второй контроллер вида скрывает панель навигации.

важные методы в первом контроллере вида

- ( void ) viewWillAppear: ( BOOL )animated {

      [ super viewWillAppear: animated ];
      [ [ [ self navigationController ] navigationBar ] setHidden: NO ];

      UIButton *nextButton;
      nextButton = [ UIButton buttonWithType: UIButtonTypeRoundedRect ];
      [ nextButton setFrame: CGRectMake( 50.0, 50.0, 200.0, 150.0 ) ];
      [ nextButton setTag: 100 ];
      [ nextButton addTarget: self action: @selector( touchedNextButton: ) forControlEvents: UIControlEventTouchUpInside ];
      [ [ self view ] addSubview: nextButton ];
}

- ( BOOL ) shouldAutorotateToInterfaceOrientation: ( UIInterfaceOrientation )interfaceOrientation {

   // Return YES for supported orientations
   BOOL iResult;
   iResult = ( ( interfaceOrientation == UIInterfaceOrientationPortrait ) || ( interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) ||
                       ( interfaceOrientation == UIInterfaceOrientationLandscapeRight ) );
   return iResult;

}

    - ( void ) didRotateFromInterfaceOrientation: ( UIInterfaceOrientation )fromInterfaceOrientation {

        UIInterfaceOrientation orientation = [ [ UIDevice currentDevice ] orientation ];

        UIButton *button = ( UIButton * )[ [ self view ] viewWithTag: 100 ];

        switch ( orientation ) {
            case UIInterfaceOrientationPortrait:
                [ button setFrame: CGRectMake( 50.0, 50.0, 200.0, 150.0 ) ];
                break;
            case UIInterfaceOrientationLandscapeLeft:
            case UIInterfaceOrientationLandscapeRight:
                [ button setFrame: CGRectMake( 50.0, 50.0, 200.0, 150.0 ) ];
                break;
            default:
                break;
        }
    }

важные методы в контроллере второго вида

- ( void ) viewDidLoad {

    [ [ [ self navigationController ] navigationBar ] setHidden: YES ];

    UIImage *imageBackArrow_iPhone = [ UIImage nonCachedImageNamed: @"backArrow_iPhone.png" ];
    NSMutableArray *toolbarItems = [ [ NSMutableArray alloc ] initWithCapacity: 5 ];
    [ toolbarItems addObject: [ [ [ UIBarButtonItem alloc ] initWithImage: imageBackArrow_iPhone style: UIBarButtonItemStylePlain target: self
                                                                       action: @selector( touchedBackArrowButton ) ] autorelease ] ];
        UIToolbar *toolbar = [ [ UIToolbar alloc ] initWithFrame: CGRectMake( 0.0, 416.0, 320.0, 44.0 ) ];
        [ toolbar setAutoresizingMask: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin ];
        [ toolbar setItems: toolbarItems ];
        [ toolbarItems release ];
        [ [ self view ] addSubview: toolbar ];
        [ toolbar release ];
    }
}

Остальные методы в контроллере второго вида аналогичны контроллеру первого вида.

enter image description here

enter image description here

После запуска в портретном режиме на первом контроллере вида я коснулся следующей кнопки.Смена ориентации работает нормально.(Первый снимок экрана)

Но, начав в портретном режиме в первом контроллере вида, я перешел в ландшафтный режим.Затем я коснулся следующей кнопки, это сделало странный макет.(Второй снимок экрана)

Я не знаю, что делает эту проблему.

Пожалуйста, дайте мне знать, что вы испытали.Ваши советы разбудят меня.Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 21 мая 2011

Почему бы вам не использовать маски с автоматическим изменением размера?

0 голосов
/ 21 мая 2011

код выглядит очень маловероятно .... но Вы можете попробовать изменить размер вещи в вашем методе viewWillAppear вашего viewcontroller. Это может помочь.

...