2

я получил небольшую проблему, при запуске моего SplitView в альбомном, есть маленькое черное пространство над моим левым контроллером вида: alt textпроблемы позиционирования с uisplitviewcontroller в левом зрении

после поворота моего Ipad к портрету и переключаясь к пейзажу, пространство ушло.

если я загрузить UITableViewController непосредственно в вид слева, а не в navigationcontroller, он отлично работает: alt text

какие-либо идеи, почему это происходит ??

// Produkte 
    self.produkteMainTableVC = [[produkteMainTableViewController alloc] initWithStyle:UITableViewStylePlain]; 
    UINavigationController *produkteMainNavigationController = [[UINavigationController alloc] initWithRootViewController:self.produkteMainTableVC]; 
    self.produkteDetailVC = [[produkteDetailViewController alloc] initWithNibName:@"produkteDetailViewController" bundle:nil]; 
    self.produkteSplitVC = [[UISplitViewController alloc] init]; 

    self.produkteSplitVC.delegate = self.produkteDetailVC; 
    self.produkteMainTableVC.produkteDetailVC = produkteDetailVC; 
    [self.produkteSplitVC setViewControllers:[NSArray arrayWithObjects:produkteMainNavigationController,self.produkteDetailVC,nil]]; 

благодарит за помощь!

Редактировать: его ровно 20px как панель состояния. это помогает кому-либо?

edit2:

делать что-то вроде этого:

if(self.navigationController.navigationBar.frame.origin.y >= 20.0) { 

     self.navigationController.navigationBar.frame = CGRectMake(self.navigationController.navigationBar.frame.origin.x, 0.0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height); 
    } 

результаты, которые: alt text

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

+0

Вы получили какое-либо рабочее решение для этого? – TomSwift

+0

нет. решил использовать разделенный вид без табуляции и пересмотрел мою концепцию навигации – choise

+0

Я понял способ достижения этого; см. мой ответ ниже. Хитрость заключалась в том, чтобы не использовать стандартный UITabViewController и вместо этого создавать свои собственные. Довольно легко, так как UITabViewController довольно простой. – TomSwift

ответ

0

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

+0

но это работает;) Как вы думаете, яблоко это одобрит? не знаю, есть ли подобные приложения там. у вас есть идея, как избежать этого особого поведения? – choise

+0

Возможно, это будет одобрено, если вы сможете выяснить, как преодолеть проблему 20px. Хотя я пытался сделать это в другой ситуации и сдался. – Brian

+0

Можете ли вы проверить мое второе редактирование? возможно, у вас есть идея. – choise

0

Я столкнулся с этой проблемой, не имея разрешения. Единственное, что я заметил, это НЕ происходит, когда мастер не включает в себя UINavigationController в качестве своего корня.

Кто-нибудь придумал решение?

0

Вот что я сделал, и он работает нормально.

Я создал собственный пользовательский контроллер табуляции, полученный от UIViewController. В viewDidLoad Я добавляю UITabBar в нижнюю часть представления и назначаю делегат себе, чтобы я мог обрабатывать изменения вкладок. (Я возвращаю это UITabBar как rotatingFooterView) Вкладка меняет результат на замену текущего контроллера вида, как реальный UITabBarController. При обмене диспетчерами представлений (иногда UISplitViewController, хостинг UINavigationController в главном представлении), я добавляю и позиционирую вид view-controller в своем представлении выше UITabBar. Я также осторожно пересылаю viewWill/DidAppear/Disappear запросы на текущий контроллер представления, а также каждое сообщение will/didRotate.

+1

У вас есть что-то вроде образца проекта для обмена с нами? – choise

3

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

Я была такая же проблема (с той же конфигурацией: SplitView в TabBar). Это свойство решило это!

[self.splitViewController setWantsFullScreenLayout:YES]; 
+0

спасибо за этот поздний комментарий. конечно, это, вероятно, поможет некоторым людям! – choise

+0

@Funyafunya Я как будто собирался сходить с ума по этому вопросу, и я чуть не ударил стену. Но наверняка ваш поздний комментарий просто спас меня прямо сейчас. С этого момента я буду всегда публиковать свои правильные известные решения/опыт, даже если это слишком поздно :) Спасибо, друг. – Humayun

+0

Никогда не поздно добавить что-то к вопросу SO. Вы не просто отвечаете на вопрос OP, вы отвечаете на вопрос о сотнях других разработчиков, которые встречают этот поток в будущем. Так что спасибо! – Dermot

0

похоже, что эта проблема возникает из iOS 7.0. Установка фрейма UINavigationBar в некоторых случаях не работает.Я думаю, что это может решить вашу проблему:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { 
     self.navigationController.view.frame = CGRectMake(0, -20, self.navigationController.view.frame.size.width, 
                  self.navigationController.view.frame.size.height); 
    } 

Этот код должен быть вызван только один раз (например, в - (void)viewDidLoad). В моем случае он работает для любой ориентации устройства.

Смежные вопросы