Наложение представления на весь экран при использовании UITabBarController?

Я хочу наложить прозрачную графику в стиле HUD на весь экран в настройке UITabBarController. Кнопка для этого находится на первом экране вкладки (FirstViewController), и наложение также должно охватывать вкладки... возможно ли это?

Ответ 1

Вы можете напрямую прикрепить свой новый вид к своему окну.

[[[UIApplication sharedApplication] keyWindow] addSubview:myNewView];

Ответ 2

Вышеупомянутое решение Хенрик П. Хессель является хорошим, но есть одна проблема с этим решением. Проблема уже упоминалась в elsurudo в комментарии ниже ответа.

Проблема с этим решением заключается в том, что наложение появляется вверх и вниз, и не вращается.

У меня возникла та же проблема, и я пробовал разные вещи, и у меня есть одно решение для устранения этой проблемы.

Решение прост. Вы можете добавить это представление myNewView в UITabBarController.

[self.tabBarController.view addSubview:myNewView];

Надеюсь, это будет полезно для будущих посетителей.

Ответ 3

UIView *modal = [[UIView alloc] initWithFrame:self.view.window.frame];
[self.view.window addSubview:modal];

Это может быть то же самое, что и упомянутый выше [[UIApplication sharedApplication] keyWindow]. Но мне нравится ссылаться на него в текущем виде.

Ответ 4

Вдохновленный rdelmar ответит на другой вопрос, я рекомендую поместить ваш UITabBarController в Container View другой ViewController. Затем добавьте ваше hud на ViewController.

screenshot for answer

Ответ 5

Мне очень понравилось то, что написал здесь Чейз Роберт, поэтому я подумал также предоставить версию Swift 3.

    if let window = view.window {
        let subView = UIView(frame: window.frame)
        window.addSubview(subView)
    }

Я также добавил условие, так что вы не получите сбоя, если нет окон.