старая проблема с дисплеями, сдвигающимися после модального вида - PullRequest
5 голосов
/ 30 января 2010

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

У меня есть оконное приложение, которое создает и загружает UIViewController из xib. Он имеет отключенную строку состояния, высоту 480 и UISegmentedControl с началом координат у 451. Он хорошо отображается в нижней части экрана. *

В viewDidLoad UIViewController я создаю UIView initWithFrame:CGRectMake(0.0, 0.0, 320.0, 431.0)]; (это 480 - 29 пикселей для UISegmentedControl и 20 для строки состояния.) Я добавляю его в UIViewController с помощью [self.view addSubview:gameBoard];. Затем некоторые части игры UIView добавляются как подпредставления UIView игровой доски, и все отображается так, как я думаю.

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

self.squadOrders = [[SquadOrders alloc] initWithNibName:@"SquadOrders" bundle:nil];
    squadOrders.viewControllerDelegate = self;
    [self presentModalViewController:squadOrders animated:YES];

И модальное диалоговое окно отображается так, как я думаю, скользя вверх от нижнего края экрана, не закрывая строку состояния, а закрывая UISegmentedControl, упомянутый в нижней части корневого UIViewController. Это уволено

[self dismissModalViewControllerAnimated:YES];

и вот тут начинается беда. Элемент управления UISegmented смещен вниз на 20 пикселей, так что только 9 пикселей из него видны в нижней части экрана. В верхней части, где вид был смещен, имеется 20-пиксельная белая щель.

* включение строки состояния на этом или любом другом xib не меняет описанное поведение вообще.

Другие вопросы, связанные с переполнением стека:

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

Содержание UIScrollView сместилось после закрытия ModalViewController - Я играл с высотой всех представлений и контроллеров - уверен, что они совпадают, не помогло. Опять же, кадр можно сбросить, но он касается только симптома.

Есть и другие, но пока эта проблема не решена.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2011

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

По сути, у меня есть BaseView (320 x 480, без строки состояния), контроллер которого находится в моем контроллере навигации, а затем остальная часть моего приложения добавляется в качестве подпредставлений в BaseView. Теперь все отлично работает.

0 голосов
/ 13 марта 2011

Я только что решил эту проблему со смещением вида вниз. Это связано с тем, что для navigationBar.barStyle установлено значение UIBarStyleBlackTranslucent .

...