UIToolbar Lunacy между версиями iOS - PullRequest
2 голосов
/ 28 января 2012

Итак ... Мой вопрос немного странный.У меня есть простая UIToolbar, добавляемая в иерархию представлений навигационного контроллера, вызываемого во время viewDidLoad.Звучит просто, правда?Ну, вот в чем проблема: панель инструментов сама по себе прозрачна, но кнопок нет ни в одной версии, кроме iOS 5.

Я пытался всю ночь переставлять и переупорядочивать вызовы setFrame, setTranslucent и setStyle, но ничего не сработало, просто пусто!

Итак, у меня был пук на мозг: что если я сделаю новый проект, а затем создам точно такой же UIToolbar?Ну, это сработало.В совершенстве.Итак, у меня был другой пердеж мозга: что, если это просто, что мой экземпляр сломан?Поэтому я создал новую панель инструментов в существующем проекте, и она оказалась пустой ...

Это заставляет меня поверить, что иерархия представления моего navigationController повреждена, но каким образом я понятия не имею ...Кто-нибудь знает, как решить мою головоломку (это симулятор или iOS 4.3.2?)?

CODE (работает на iOS 5+, (весело, несмотря на устаревание) и в других проектах,только не мое):

toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 22, self.view.bounds.size.width, 44)]autorelease]; 
    [toolbar setBarStyle:UIBarStyleBlackTranslucent];
    toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; 
    [self.view addSubview:toolbar];   

Вот изображения с симулятора iOS 4.3.2 (вверху) и симулятора iOS 5.0.1 (внизу): iOS 4.3.2 Simulator iOS 5.0.1 Simulator

РЕДАКТИРОВАТЬ: Согласно предложению Роба, я изменил код для self.view addSubview ... но без изменений.А что касается его вопроса о том, почему я не использую встроенную панель инструментов navigationController, то это потому, что у меня фактически есть ДВЕ панели инструментов, которые анимируются с помощью этой кнопки действия на изображении.

РЕДАКТИРОВАТЬ 2: Дляясности, соблюдайте скриншоты.ПОЧЕМУ НЕВИДИМ !!!У меня есть анимация и просмотр иерархии вниз.Если кому-то нужно увидеть метод viewDidLoad, он довольно массивный и громоздкий ...

Ответы [ 3 ]

2 голосов
/ 28 января 2012

Вы не должны связываться с деревом вида UINavigationController. Вам следует связываться только с той частью дерева представлений, которую вы предоставляете.

Если вы используете UINavigationController, почему бы вам просто не использовать панель инструментов, которую предоставляет вам навигационный контроллер?

Справочник по классам UINavigationController : Отображение панели инструментов
Справочник по классам UINavigationController : Настройка пользовательских панелей инструментов
Описание классов UIViewController : setToolbarItems:animated:

0 голосов
/ 13 февраля 2012

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

[ toolbar setToolbarHidden: YES animated: YES ] ;
toolbar.topViewController.toolbarItems = < whatever the new toolbar should look like > ;
[ toolbar setToolbarHidden: NO animated: YES ];

Идея заключается в том, что внешний вид панели инструментов будет управляться свойством toolbarItems текущего контроллера представления в соответствии с документацией. Вы можете создавать настраиваемые экземпляры элементов панели инструментов, которые выглядят практически как все, что вы хотите.

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

0 голосов
/ 06 февраля 2012

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

[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];
...