iOS: программное создание UIWindow приводит к неправильному положению

В iOS 5.1.1 я обнаружил, что если я создаю свой UIWindow (мне надоел IB) и устанавливаю для его рамки значение [UIScreen mainScreen].bounds, окно отображается под строкой состояния. Однако, если я сделаю то же самое в iOS 6, оно появится в нужном месте чуть ниже строки состояния.

CGRect r = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame: r];
self.detailViewController = [[DetailViewController alloc] init];
self.window.rootViewController = self.detailViewController;
[self.window addSubview: detailViewController.view];
[self.window makeKeyAndVisible];

Однако если я вставлю r.origin.y += 20, чтобы переместить окно ниже строки состояния в iOS 5.1.1, это не решит проблему, и все станет еще более странным.

Как правильно разместить UIWindow в iOS при его программном создании? Спасибо.


person RRR    schedule 03.10.2012    source источник
comment
Я уверен, что у вас будет гораздо меньше проблем, если вы вернетесь к IB. Недавно я пытался исправить проблемы с макетом с помощью кода, и это заняло несколько часов. Я заставил его работать, но позже попытался сделать то же самое только с IB, и через несколько кликов он работал даже лучше, чем мое ручное кодирование. Я понял, что лучше всего использовать инструменты там, где они предназначены. В противном случае вы столкнетесь с крайними случаями, которые трудно разрешить.   -  person Brennan    schedule 08.10.2012


Ответы (2)


Вместо [[UIScreen mainScreen] bounds] вы захотите использовать [[UIScreen mainScreen] applicationFrame]. Это будет область экрана под строкой состояния (если она видна).

person escrafford    schedule 08.03.2013

Я думаю, вам, вероятно, нужно сделать это:

self.window.windowLevel = UIWindowLevelStatusBar + 1;
person Ian Hoar    schedule 09.02.2013