Помещение UIView или UIWindow над Statusbar - PullRequest
7 голосов
/ 23 ноября 2010

Моя цель - нарисовать невидимую кнопку над строкой состояния в верхней части приложения для iPhone (размер 320 * 20 пикселей).

Что бы я ни пытался, что-то глючит:

  1. Например, я пытался создать новый вид. Когда я хочу разместить вид сверху моего приложения, оно всегда исчезает за строкой состояния, а не перед ним!

  2. Я нашел еще одну замечательную идею в Stackoverflow: Добавить UIView выше всех других представлений, включая StatusBar Даже если второе UIWindow не рекомендуется, я попытался реализовать его. Он работал так, как я хотел, до того момента, когда я заметил проблему: клавиатура больше не появляется при необходимости (например, при нажатии в текстовом поле)!

Как я могу это исправить? Или есть лучший подход к моей проблеме? Это мой код для создания второго окна:

// Create window
statusWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0,0,320,20)];
statusWindow.windowLevel = UIWindowLevelStatusBar;
[statusWindow makeKeyAndVisible];

// Create statusBarButton
statusBarButton = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect buttonFrame2 = statusBarButton.frame;
buttonFrame2.size = CGSizeMake(320,20);
statusBarButton.frame = buttonFrame2;
[statusBarButton addTarget:self action:@selector(goTop) forControlEvents:UIControlEventTouchUpInside]; 

// Place button into the new window
[statusWindow addSubview:statusBarButton];

Ответы [ 4 ]

8 голосов
/ 05 июня 2014

в файле AppDelegate

self.window.windowLevel = UIWindowLevelStatusBar;

или в любом другом классе

[AppDelegate appDelegate].window.windowLevel = UIWindowLevelStatusBar;

и если вы хотите, чтобы строка состояния снова находилась сверху, вы можете установить

self.window.windowLevel = UIWindowLevelNormal;
8 голосов
/ 23 ноября 2010

В документации для - [UIWindow makeKeyAndVisible]:

Это удобный способ сделать приемник главным окном и отображать его перед другими окнами.Вы также можете скрыть и открыть окно, используя унаследованное скрытое свойство UIView.

«Окно ключа» - это окно, которое получает определенные входные события;текстовые поля в неключевом окне могут не работать.Есть две вещи, которые вы можете сделать:

  • Вызвать [window makeKeyAndVisible] для старого окна ключа впоследствии
  • Установить statusWindow.hidden = NO вместо этого (но яне понимаю, почему он будет скрыт по умолчанию).Я не думаю, что вы можете «отобразить его перед другими окнами», как -makeKeyAndVisible делает;окна не имеют суперпредставления, которое вы можете вызвать -bringSubviewToFront: на IIRC.
7 голосов
/ 24 ноября 2010

Если другие пользователи хотят реализовать это, вот мое решение:

// Create window
statusWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0,0,320,20)];
statusWindow.windowLevel = UIWindowLevelStatusBar;
// Dont make the statusWindow keyWindow or the keyboard won't work!
// [statusWindow makeKeyAndVisible];

// Create statusBarButton
statusBarButton = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect buttonFrame2 = statusBarButton.frame;
buttonFrame2.size = CGSizeMake(320,20);
statusBarButton.frame = buttonFrame2;
[statusBarButton addTarget:self action:@selector(goTop) forControlEvents:UIControlEventTouchUpInside]; 

// Place button into the new window
[statusWindow addSubview:statusBarButton];

// Instead, add this:
[window makeKeyAndVisible]; // has to be main window of app
statusWindow.hidden = NO; // without this the statusWindow won't appear
0 голосов
/ 23 ноября 2010

Попробуйте:

[self.view bringSubviewToFront:statusWindow];

Я не думаю, что возможно вывести вид перед строкой состояния.

...