Chcę wyświetlić, ponad wszystkimi innymi widokami, nawet pasek nawigacji, rodzaj „wyskakującego” widoku, który wygląda następująco:
- na pełnym ekranie czarne tło z 0,5 alfa, aby zobaczyć drugie
UIViewController
pod spodem. UIView
okno w środku z niektórych informacji (kalendarz, jeśli chcesz wiedzieć wszystko).
Aby to zrobić, utworzyłem UIViewController, który zawiera dwa elementy UIViews
(tło i okno) i próbuję je wyświetlić. Wypróbowałem prosty [mySuperVC addSubview:myPopUpVC.view]
, ale nadal mam pasek nawigacji powyżej.
Próbowałem przedstawić go jako modal, ale UIViewController
spód znika i tracę efekt przezroczystości.
Każdy pomysł, aby to zrobić, jestem pewien, że to dość proste ...
Dzięki!
ios
uiviewcontroller
uinavigationbar
popupwindow
Nicolas Roy
źródło
źródło
Odpowiedzi:
Możesz to zrobić, dodając widok bezpośrednio do keyWindow:
AKTUALIZACJA - dla Swift 4.1 i nowszych
źródło
[self.navigationController.view addSubview:overlayView];
jest tym, czego naprawdę chceszźródło
Oto proste, eleganckie rozwiązanie, które działa dla mnie. Możesz ustawić pozycję Z paska nawigacji na poniżej widoku:
Pamiętaj, aby po zakończeniu ustawić go z powrotem na 0.
źródło
Szybkie wersje sprawdzonej odpowiedzi:
Swift 4:
Swift 3.1:
źródło
Dodaj widok jako widok podrzędny NavigationController.
Możesz także dodać go w oknie:
Mam nadzieję że to pomoże.. :)
źródło
let navigationBar = viewController.navigationController!.navigationBar navigationBar.addSubview(coverView)
Świetne rozwiązanie Dalef w szybkim:
źródło
Odpowiedź @ Nam działa świetnie, jeśli chcesz wyświetlić widok niestandardowy, ale jeśli widok niestandardowy wymaga interakcji użytkownika, musisz wyłączyć interakcję dla
navigationBar
.Jak powiedziano w odpowiedzi Nam, nie zapomnij cofnąć tych zmian:
Możesz to zrobić w lepszy sposób dzięki rozszerzeniu:
I po prostu użyj tego w następujący sposób:
źródło
Szybka wersja odpowiedzi @Nicolas Bonnet:
Nie zapominaj, że okno musi być silną właściwością, ponieważ oryginalna odpowiedź prowadzi do natychmiastowego zwolnienia okna
źródło
Polecam utworzenie nowego interfejsu użytkownika:
Następnie możesz zarządzać swoim widokiem w innym UIViewController. Aby usunąć okna:
mam nadzieję, że to pomoże!
źródło
Jest na to więcej niż jeden sposób:
1- Dodaj swoją
UIView
naUIWindow
zamiast dodawania goUIViewController
. W ten sposób wszystko będzie na wierzchu.2- Użyj niestandardowego przejścia, które sprawi, że Twój UIViewController będzie wyświetlać z tyłu 0,5 alfa
W tym celu polecam spojrzeć na to: https://github.com/Citrrus/BlurryModalSegue
źródło
źródło
W Swift 4.2 i Xcode 10
W celu C
UIView * spinnerView; // To jest twój widok
Może to działać tylko w trybie pionowym lub poziomym.
Jeszcze jeden prosty kod to:
źródło
Uwaga: jeśli chcesz dodać widok na pełnym ekranie, użyj tylko poniższego kodu
Dodaj te rozszerzenia z UIViewController
Kontynuuj jak zwykły proces dodawania podglądu
Teraz użyj dodając viewDidAppear UIViewController
źródło
Użyłbym podklasy UIViewController zawierającej „Widok kontenera”, który osadza inne kontrolery widoku. Będziesz wtedy mógł dodać kontroler nawigacji do Widoku kontenera (na przykład używając segmentu relacji osadzania).
Zobacz Implementowanie kontrolera widoku kontenera
źródło
Ta metoda działa z xcode 9.4, iOS 11.4
źródło
źródło
Musisz dodać widok podrzędny do pierwszego okna z typem UITextEffectsWindow. Po pierwsze, ponieważ niestandardowe klawiatury dodają swoje UITextEffectsWindow, a jeśli dodasz do niego widok podrzędny, nie będzie to działać poprawnie. Nie można również dodać widoku podrzędnego do ostatniego okna, ponieważ na przykład klawiatura jest również oknem i nie można jej wyświetlić z okna klawiatury. Tak więc najlepszym rozwiązaniem, jakie znalazłem, jest dodanie widoku podrzędnego (lub nawet kontrolera widoku push) do pierwszego okna z typem UITextEffectsWindow, to okno obejmuje widok akcesoriów, pasek nawigacyjny - wszystko.
źródło