Позиционирование представления отличается при запуске приложения

У меня есть приложение с UITabBarController, и когда нажимаются разные вкладки, я переопределяю viewWillAppear, получаю ссылку на tabBarController и затем изменяю размер его фрейма. Причина этого в том, что некоторые вкладки требуют полной высоты экрана, в то время как другие вкладки имеют фон в верхних 120 пикселях.

Я ссылаюсь на tabBarcontroller, получая делегат приложения и используя его ссылку на tabBarController для перемещения его позиции:

MyAppDelegate *del= [общее приложение UIApplication].delegate; del.tabBarController.view.frame = CGRectMake(0,120,320,360);

Этот метод отлично работает при переключении между вкладками, но при первой загрузке приложения оно работает немного странно, и я не могу понять, почему. Моя первая вкладка на самом деле имеет NavigationBar, а затем содержит представление с pickerView. В первый раз, когда мое приложение загружается, NavigationBar отображается примерно на 10 пикселей ниже, однако pickerView по-прежнему отображается в правильном положении. Я надеялся, что смогу обойти это, по-разному обрабатывая вещи при первом вызове viewWillAppear, однако, если я уменьшу позицию y, чтобы компенсировать панель навигации, она сместит все вместе, включая средство выбора даты в представлении.

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

Любая помощь будет оценена по достоинству! Благодарность


person MichaelGois    schedule 05.02.2012    source источник


Ответы (1)


Хорошо, я понял это. Если кому-то интересно, оказывается, что при запуске приложения кадр UINavigationBar имеет позицию y 10 пикселей. Все, что мне нужно было сделать, это установить вертикальное положение кадра UINavigationBar обратно на 0 пикселей, и все заработало! Кому нужно это сделать, вот код:

self.navigationController.navigationBar.frame = CGRectMake(0,0,320,45)

Я вызываю указанную выше строку в методе viewWillAppear, и все работает, как и ожидалось.

person MichaelGois    schedule 07.02.2012