Почему панель инструментов моего контроллера навигации перекрывает мое табличное представление, когда отображается в разделенном представлении впервые? - PullRequest
1 голос
/ 21 апреля 2011

Я работаю над приложением для iPad, которое использует UISplitViewController в качестве rootViewController для моего окна.Контроллер подробного представления для разделенного вида представляет собой UINavigationViewController, который содержит UITableViewController.И контроллер разделенного вида, и контроллер навигационного представления создаются программно и не используют кончик.Контроллер табличного представления - это пользовательский класс, который расширяет UITableViewController обычными методами делегирования табличного представления.

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

Popover in portrait

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

Split view in landscape with table view obscured

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

Split view in landscape with table view fully visible

Что мне нужно для этого сделатьчто табличное представление отображается правильно при первом повороте устройства в альбомную ориентацию?

Редактировать:

UISplitViewController создается в application:didFinishLaunchingWithOptions: и его viewControllers свойство установлено в массив, содержащий my UINavigationController (главный контроллер на языке разделенного представления) с индексом 0 и контроллер UIWebView с индексом 1.

UINavigationController создается с помощью[[UINavigationController alloc] initWithRootViewController:tableViewController].Экземпляр tableViewController является подклассом UITableViewController.В частности, вот объявление интерфейса:

@interface LocalRevisionsList :
  UITableViewController <NSFetchedResultsControllerDelegate> {}

TableViewController инициализируется следующим образом:

tableViewController =
  [[LocalRevisionList alloc] initWithNibName:@"LocalRevisionList" bundle:nil];

Если это полезно, я могу предоставить информацию из .xib.Однако даже когда я инициализирую табличное представление без xib (tableViewController = [[LocalRevisionList alloc] init]), я все еще вижу проблему с отображением в первый раз.Единственные переопределенные операции в LocalRevisionList - это viewDidLoad.Вот это полностью (просто чтобы показать, что мы здесь ничего не делаем):

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"My Title";    
    NSError *error;
    if (![[self fetchedResultsController] performFetch:&error])
    {
        abort();
    }
}

Edit 2:

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

Когда я разбиваюсь внутри shouldAutorotateToInterfaceOrientation: ивыгрузите фрейм контроллера корневого представления, я вижу:

(gdb) print (CGRect)[[self view] frame]
$2 = {
  origin = {
    x = 0, 
    y = 0
  }, 
  size = {
    width = 768, 
    height = 1004
  }
}

Распечатывая фрейм моего контроллера навигации, который является первым контроллером в моем массиве разделения представления, я вижу это:

(gdb) print (CGRect)[[[self localArticlesNavController] view] frame]
$3 = {
  origin = {
    x = -320, 
    y = 0
  }, 
  size = {
    width = 320, 
    height = 1004
  }
}

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

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