iPad: таблицы в представлениях Popover не прокручиваются для отображения выбранной строки - PullRequest
2 голосов
/ 15 апреля 2010

У меня две проблемы с viewcontroller в альбомной ориентации на iPad.

(1) У меня есть два всплывающих окна с таблицами. Таблицы следует прокрутить до определенной строки, чтобы отразить выбор в главном представлении. Вместо этого некоторые таблицы прокручиваются вниз, но выбранная строка остается за кадром.

(2) Все мои листы действий имеют ширину 320.

В Интерфейсном Разработчике все мои представления создаются в альбомной ориентации. Только главного окна нет, но я не вижу способа это изменить.

Моя конфигурация: После запуска я получаю следующие координаты для моего главного окна и вида основного контроллера:

Window frame {{0, 0}, {768, 1024}} mainView frame {{0, 0}, {748, 1024}}

Все остальные виды после этого показывают эти координаты при вызове (при загрузке, но до представления):

    frame of keysig {{0, 0}, {1024, 768}}
    frame of instrumentSelect {{20, 0}, {1024, 768}}
    frame of settings {{0, 0}, {467, 300}}

Во всех моих viewControllers я отвечаю на shouldAutorotateToInterfaceOrientation:

            return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
                        (interfaceOrientation == UIInterfaceOrientationLandscapeRight));

Все (почти) работает как положено. Приложение запускается в одном из двух ландшафтных режимов. Представления (и контроллеры представления) отображают все, к чему они принадлежат, и касания работают по всему экрану, как и ожидалось. Тем не менее, у меня все еще есть две проблемы.

Проблема 1: У меня есть два всплывающих окна, содержащие таблицы, достаточно длинные, чтобы убежать с экрана. Таблицы должны прокручиваться до выбранной строки. Они прокручивают, то есть они не начинают визуально со строки 1, но они недостаточно прокручивают, чтобы показать выбранную строку.

альтернативный текст http://idisk.mac.com/mahboud//Public/keysig.png

альтернативный текст http://idisk.mac.com/mahboud//Public/instrumentlist.png

Почти кажется, что внутренний прямоугольник UITable создается с неправильным номером и остается таким же, но я проверил обе координаты содержимого scrollView в UITableView, и они показались разумными.

Проблема 2: Я думаю, что это связано с проблемой 1, потому что мои листы действий имеют ширину 320. Я могу только предположить, что iPad позволяет actionSheets только в 320 или 480 ширин и так или иначе считает, что экран ориентирован в портретном режиме, использует более узкую ширину.

Вот, пожалуйста. Я не могу поверить, что я все еще зацикливаюсь на вопросах ориентации. Клянусь, Apple не позволяет легко иметь приложение с альбомной ориентацией. Есть идеи?

1 Ответ

0 голосов
/ 03 мая 2010

Я вроде понял это. Если я возьму

[self.tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionNone animated:YES];

из -viewDidAppear или -viewWillAppear, и вместо этого поместите его сразу после моего -presentPopoverFrom ..., тогда это будет работать:

[popController presentPopoverFromBarButtonItem:keySigBBItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

[keySignatureTableVC.tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionMiddle animated:NO];

Что должно происходить, так это то, что -viewDidAppear и -viewWillAppear должны вызываться до того, как presentPopover ... изменит размеры или переориентирует представление. То, что я делаю в этих двух методах, не работает на правильном кадре или границах. Прокрутка после, кажется, работает.

...