Как надежно разместить встроенный UINavigationController UIToolbar поверх iPad - PullRequest
1 голос
/ 24 января 2011

Я пытаюсь использовать встроенный в UIToolbar объект UINavigationController в своем приложении для iPad, но я хочу, чтобы он отображался в верхней части представления, а не в нижней части, где он по умолчанию установлен.

Я также скрываю панель навигации объекта UINavigationController.

Чтобы сделать это, мне пришлось написать следующий код:

navigationController.navigationBarHidden = YES;
navigationController.toolbarHidden = NO;
navigationController.toolbar.frame = CGRectMake(0, 0, 768, 44);

Это решение работает с одним исключением: когда приложениеПереходит в фоновый режим и снова становится активным, панель инструментов всегда перемещается внизу представления.

Я пытался переместить код из viewDidLoad в viewDidAppear: анимированный, и он все еще ведет себя таким образом.

Во-первых, есть ли лучший способ приблизиться к этому, и если нет, как я могу остановить перемещение панели инструментов?

Вместо этого я также решил использовать свой собственный объект UIToolbar и добавлять его к каждомупросмотр с помощью пользовательского базового класса UIViewController 'viewDidLoad.Тем не менее, это приводит к тому, что панель инструментов анимируется, когда каждое представление выдвигается или выталкивается, потому что оно на самом деле является частью представления, что просто кажется «ненормальным».

Есть идеи относительно возможных решений?

Спасибовсе!

Ответы [ 3 ]

2 голосов
/ 25 января 2011

В документации к свойству панели инструментов UINavigationController сказано:

Доступ к этой панели инструментов предоставляется исключительно для клиентов, которые хотят представить лист действий с панели инструментов. Вы не должны изменять объект UIToolbar напрямую.

Это что-то вроде хакерства, но вы можете сделать UIToolbar самостоятельно и добавить его прямо в окно (то есть поверх контроллера навигации).

1 голос
/ 25 января 2011

Вы можете использовать категорию ниже, чтобы изменить класс UIToolbar для достижения того, что вы хотите.

@implementation UIToolbar (setCenter)

-(void)setCenter:(CGPoint)center
[super setCenter:CGPointMake(384, 22)];
}
@end
0 голосов
/ 25 января 2011

Панель инструментов имеет ограниченную функциональность при использовании с UINavigationController.Он предоставляет только удобный способ управления таблицей действий на панели инструментов.

Из документов: «Доступ к этой панели инструментов предоставляется исключительно для клиентов, которые хотят представить лист действий с панели инструментов. Не следует изменятьОбъект UIToolbar напрямую. "

Решение, которое я бы использовал, - создать подкласс UIView с удобными методами для управления таблицей действий и любыми другими пользовательскими функциями, которые вам нужны.Это пользовательское представление может быть общим для всех представлений в UINavigationController и размещено там, где вы хотите, в родительском представлении.Это даст вам полный контроль над вашей пользовательской верхней панелью инструментов.

...