UITabBar для iPhone как часть окна приложения;проблемы при вращении устройства - PullRequest
0 голосов
/ 05 марта 2011

У меня есть приложение для iPhone, которое использует Navigation Controller для отображения верхней панели (с заголовком и кнопкой «Назад» и т. Д.).

Я добавил UITabBar в окно приложения, которое позволяет переключаться между его частями. Вместо добавления панели вкладок к каждому представлению ViewController я добавил панель в окно приложения.

(Когда у меня это было в ViewController, переключение между контроллерами заставляло панель вкладок перемещаться влево / вправо, когда происходило анимированное всплывающее окно / нажатие, вместе со всем видом).

Итак, я добавил UITabBar к MainWindow.xib и привязал его к переменной делегата приложения. В моем методе didFinishLaunchingWithOptions я добавил следующий код:

[self.window addSubview:navigationController.view];

CGRect frame = navigationController.view.frame;
frame.size.height -= tabbar.frame.size.height;
navigationController.view.frame = frame;
tabbar.selectedItem = [tabbar.items objectAtIndex:0];

, чтобы изменить размер основного (navigationController) вида, чтобы сделать TabBar видимым.

Проблема появляется, когда я поворачиваю устройство - мой вид растягивается до полного окна, и я теряю способность показывать TabBar.

Я добавил метод - (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation в свой ViewController со следующим кодом:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    CGRect frame = self.view.frame;
    frame.size.height -= [AppState shared].tabBar.frame.size.height;
    //frame.origin.y = [AppState shared].tabBar.frame.size.height;
    //frame.origin.x = 100;
    self.view.frame = frame;    
    frame = [AppState shared].tabBar.frame;
    frame.origin.y = [UIScreen mainScreen].bounds.size.height - frame.origin.y - frame.size.height;
    [AppState shared].tabBar.frame = frame;
}

Он изменяет размеры представления и перемещает панель вкладок в верхнюю / нижнюю часть вида (здесь я разрешаю только книжную / книжную ориентацию вверх ногами). Проблема в том, что моя TabBar перевернута вверх дном, а также, она больше не активна.

Это похоже на изображение ниже:

Tab bar upside down

Кто-нибудь знает, как справиться с такой ситуацией? Или как сделать панель вкладок не привязанной к просмотру контроллера, но также способной плавно обрабатывать поворот интерфейса?

1 Ответ

1 голос
/ 05 марта 2011

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

UITabBarView должен управляться непосредственно UITabBarController, который, в свою очередь, должен управлять всеми контроллерами представления для представлений, отображаемых на панели вкладок, т.е. контроллер панели вкладок является типом контроллера навигации, который управляет субконтроллерами.

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

TabbarController:
    -->tab1ViewController
    -->tab2ViewController
    -->tab3ViewController(UINavigationController):
            -->rootViewController-->secondViewController

Вы пытаетесь перемещать представление панели вкладок и управлять им без его контроллера и правильной иерархии контроллеров. Это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...