Контроллер панели вкладок Apple имеет множество ограничений.Одним из важных ограничений является то, что вы не можете изменять панель вкладок в безопасном режиме отклонения.Моя панель вкладок имеет простые скользящие движения и она многорядная.По этим причинам я решил построить TBVC с самого начала;Кажется, все работает правильно, но я действительно возился с ротациейКаждый раз, когда я меняю ориентацию, меняются основные рамки представления.
Вот моя иерархия сверху до представления контейнера: -MainView - содержит -> TabBarView + containerView. Контейнерное представление - это представление, используемое для хранения загруженных представлений.от других контроллеров.Вот метод -loadView моего CustomTabBaViewController
- (void)loadView
{
UIView *theView=[[UIView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
theView.autoresizingMask=UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
theView.backgroundColor=[UIColor greenColor];
containerOfControllersView=[[UIView alloc] initWithFrame:theView.bounds];
containerOfControllersView.backgroundColor=[UIColor blueColor];
containerOfControllersView.autoresizingMask=UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[theView addSubview:containerOfControllersView];
ideoloTabBar=[[IdeoloTabBar alloc]initWithNumberOfControllers:[controllers count]];
[theView addSubview:ideoloTabBar];
self.view=theView;
[theView release];
}
Когда я устанавливаю новое представление из другого контроллера, я использую этот метод:
-(void)setCurrentViewWithView:(UIView*)theView{
if ([[self.containerOfControllersView subviews] count]>0) {
UIView *tagView=[self.containerOfControllersView viewWithTag:555];
tagView.tag=0;
[tagView removeFromSuperview];
}
theView.tag=555;
theView.autoresizingMask=UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
theView.frame=[[UIScreen mainScreen]applicationFrame];
[self.containerOfControllersView addSubview:theView];
[self.view bringSubviewToFront:ideoloTabBar];
}
Как вы можете видеть представления из другого представленияконтроллеры применяются с помощью applicationFrame.
Когда я поворачиваю устройство, происходит что-то не так, основное изображение не только изменяется в соответствии с новой ориентацией, но также перемещается на 20 пикселей (размер строки состояния) к боттону, таким образом, оставляяразрыв между строкой состояния и видом контейнера.Так как я дал основному виду границы экрана, которые я не могу понять, его необходимо переместить.
ОБНОВЛЕНИЕ
Я пытаюсь использовать другой подход, поэтому я изменилloadView выглядит так:
- (void)loadView
{
[super loadView];
containerOfControllersView=[[UIView alloc] initWithFrame:self.view.bounds];
containerOfControllersView.backgroundColor=[UIColor blueColor];
containerOfControllersView.autoresizingMask=UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.view.backgroundColor=[UIColor greenColor];
[self.view addSubview:containerOfControllersView];
ideoloTabBar=[[IdeoloTabBar alloc]initWithNumberOfControllers:[controllers count]];
[self.view addSubview:ideoloTabBar];
}
И в setCurrentViewWithView: (UIView *) theView я изменил строку с помощью
theView.frame=self.view.bounds;
вместо использования applicationFrame.
СЕЙЧАС:
На iPhone, когда я пытаюсь загрузить modalView, он обрезается примерно на 40 пикселей внизу. На iPad, когда я пытаюсь загрузить модальный вид, он оставляет 20 пикселей внизу, потому что 20 пикселей находятся под строкой состояния, ноwantFullScreen - это NO.
UPDATE 2
Кажется, что presentModalViewController должен вызываться из корневого контроллера представления.Я создам протокол и абстрактный подкласс UIViewController, чтобы реализовать его и правильно загрузить.
Есть предложения?обойтись?