Я хочу изменить размер панели инструментов при изменении ориентации.Но я столкнулся с трудной проблемой.
У меня есть два контроллера вида.На первом контроллере вида есть кнопка.Когда эта кнопка коснется, на дисплее появится второй вид.Эти контроллеры представления принадлежат контроллеру навигации.
Первый контроллер представления отображает панель навигации.И второй контроллер вида скрывает панель навигации.
важные методы в первом контроллере вида
- ( 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 ];
}
}
Остальные методы в контроллере второго вида аналогичны контроллеру первого вида.
После запуска в портретном режиме на первом контроллере вида я коснулся следующей кнопки.Смена ориентации работает нормально.(Первый снимок экрана)
Но, начав в портретном режиме в первом контроллере вида, я перешел в ландшафтный режим.Затем я коснулся следующей кнопки, это сделало странный макет.(Второй снимок экрана)
Я не знаю, что делает эту проблему.
Пожалуйста, дайте мне знать, что вы испытали.Ваши советы разбудят меня.Спасибо за чтение.