탐색 모음을 포함하여 무엇보다도 UI 보기
다른 보기보다 탐색 모음에서 다음과 같은 "팝업" 보기를 표시합니다.
- 전체 화면 검은색 배경과 0.5알파를 사용하여 다른 것을 볼 수 있습니다.
UIViewController
밑에 - a
UIView
정보가 있는 가운데 창(모든 것을 알고 싶다면 달력).
이를 위해 두 가지 기능이 포함된 UIViewController를 만들었습니다.UIViews
(배경 및 창)을 표시하려고 합니다.나는 간단한 것을 시도했습니다.[mySuperVC addSubview:myPopUpVC.view]
위에 내비게이션 바를 아직 가지고 있어요
모달로 표현하려고 노력했지만,UIViewController
그 밑이 사라지고, 투명성 효과를 잃게 됩니다.
이 일을 할 방법이 있다면, 꽤 간단할 것입니다.
감사합니다!
키 창에 직접 보기를 추가하여 이 작업을 수행할 수 있습니다.
UIView *myView = /* <- Your custom view */;
UIWindow *currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:myView];
업데이트 - Swift 4.1 이상의 경우
let currentWindow: UIWindow? = UIApplication.shared.keyWindow
currentWindow?.addSubview(myView)
iOS13 이상에 대한 업데이트
keyWindow
사용되지 않습니다.다음을 사용해야 합니다.
UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.addSubview(myView)
[self.navigationController.view addSubview:overlayView];
당신이 정말 원하는 것입니다.
여기 저에게 효과가 있는 간단한 우아한 해결책이 있습니다.탐색 막대의 z 위치를 보기 아래로 설정할 수 있습니다.
self.navigationController.navigationBar.layer.zPosition = -1;
완료되면 0으로 다시 설정하는 것을 기억하십시오.
선택한 응답에 대한 빠른 버전:
스위프트 4:
let view = UIView()
view.frame = UIApplication.shared.keyWindow!.frame
UIApplication.shared.keyWindow!.addSubview(view)
Swift 3.1:
let view = UIView()
view.frame = UIApplication.sharedApplication().keyWindow!.frame
UIApplication.sharedApplication().keyWindow!.addSubview(view)
Dalef의 신속한 해결책:
self.navigationController?.view.addSubview(view)
사용자 보기를 Navigation Controller의 하위 보기로 추가합니다.
[self.navigationController.navigationBar addSubview: overlayView)]
창 위에 추가할 수도 있습니다.
UIView *view = /* Your custom view */;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window addSubview:view];
이게 도움이 되길..:)
@사용자 정의 보기를 표시하려는 경우에는 Nam의 대답이 유용하지만 사용자 정의 보기에 사용자 상호 작용이 필요한 경우에는 에 대한 상호 작용을 사용하지 않도록 설정해야 합니다.
self.navigationController.navigationBar.layer.zPosition = -1
self.navigationController.navigationBar.isUserInteractionEnabled = false
Nam의 대답에서 말한 것처럼 이러한 변화를 되돌리는 것을 잊지 마십시오.
self.navigationController.navigationBar.layer.zPosition = 0
self.navigationController.navigationBar.isUserInteractionEnabled = true
You can do this in a better way with an extension:
extension UINavigationBar {
func toggle() {
if self.layer.zPosition == -1 {
self.layer.zPosition = 0
self.isUserInteractionEnabled = true
} else {
self.layer.zPosition = -1
self.isUserInteractionEnabled = false
}
}
}
다음과 같이 간단히 사용할 수 있습니다.
self.navigationController.navigationBar.toggle()
@Nicolas Bonne의 빠른 버전 답변:
var popupWindow: UIWindow?
func showViewController(controller: UIViewController) {
self.popupWindow = UIWindow(frame: UIScreen.mainScreen().bounds)
controller.view.frame = self.popupWindow!.bounds
self.popupWindow!.rootViewController = controller
self.popupWindow!.makeKeyAndVisible()
}
func viewControllerDidRemove() {
self.popupWindow?.removeFromSuperview()
self.popupWindow = nil
}
원래 대답은 창의 즉시 할당 해제로 이어지므로 창은 강력한 속성이어야 합니다.
새 UI 창을 만드는 것이 좋습니다.
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
window.rootViewController = viewController;
window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
window.opaque = NO;
window.windowLevel = UIWindowLevelCFShareCircle;
window.backgroundColor = [UIColor clearColor];
[window makeKeyAndVisible];
그런 다음 다른 UIViewController에서 보기를 관리할 수 있습니다.창 제거하기
[window removeFromSuperview];
window = nil;
그게 도움이 되길 바랍니다!
두 가지 이상의 방법이 있습니다.
1 - 추가UIView
에UIWindow
그것을 추가하는 대신UIViewController
이런 식으로 하면 모든 것 위에 있을 것입니다.
[[(AppDelegate *)[UIApplication sharedApplication].delegate window] addSubview:view];
2 - 0.5알파로 뒤에 UIView 컨트롤러를 계속 표시하는 사용자 지정 전환 사용
이를 위해 다음을 참조할 것을 권장합니다. https://github.com/Citrrus/BlurryModalSegue
[[UIApplication sharedApplication].windows.lastObject addSubview:myView];
Swift 4.2 및 Xcode 10에서
var spinnerView: UIView? //This is your view
spinnerView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
//Based on your requirement change width and height like self.view.bounds.size.width
spinnerView?.backgroundColor = UIColor.black.withAlphaComponent(0.6)
// self.view.addSubview(spinnerView)
let currentWindow: UIWindow? = UIApplication.shared.keyWindow
currentWindow?.addSubview(spinnerView!)
목표 C에서
UIView *spinnerView;//이것은 사용자의 보기입니다.
self.spinnerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.height)];
//Based on your requirement change width and height like self.view.bounds.size.width
self.spinnerView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
// [self.view addSubview:self.spinnerView];
UIWindow *currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:self.spinnerView];
세로 또는 가로 모드로 작동할 수 있습니다.
또 다른 간단한 코드는 다음과 같습니다.
yourViewName.layer.zPosition = 1//Change your view name
전체 화면에서 보기를 추가하려면 아래 코드만 사용하십시오.
이 확장된 UIViewController 추가
public extension UIViewController {
internal func makeViewAsFullScreen() {
var viewFrame:CGRect = self.view.frame
if viewFrame.origin.y > 0 || viewFrame.origin.x > 0 {
self.view.frame = UIScreen.main.bounds
}
}
}
일반적인 하위 보기 추가 프로세스로 계속 진행
이제 UIViewController의 viewDidAppear를 추가하는 데 사용합니다.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.makeViewAsFullScreen()
}
다른 보기 컨트롤러를 포함하는 "컨테이너 보기"가 포함된 UIViewController 하위 클래스를 사용합니다.그런 다음 Container View(컨테이너 보기) 내에 탐색 컨트롤러를 추가할 수 있습니다(예: 포함 관계 segue 사용).
UIApplication.shared.keyWindow?.insertSubview(yourView, at: 1)
이 방법은 xcode 9.4, iOS 11.4에서 작동합니다.
[self.navigationController.navigationBar.layer setZPosition:-0.1];
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 20, 35, 35)];
[view setBackgroundColor:[UIColor redColor]];
[self.navigationController.view addSubview:view];
[self.navigationController.view bringSubviewToFront:view];
self.navigationController.view.clipsToBounds = NO;
[self.navigationController.navigationBar.layer setZPosition:0.0];
UITextEffectsWindow 유형을 사용하여 첫 번째 창에 하위 보기를 추가해야 합니다.첫 번째로, 사용자 지정 키보드는 UITextEffects 창을 추가하기 때문에 하위 보기를 추가하면 제대로 작동하지 않습니다.또한 키보드도 창이므로 키보드 창에서 표시할 수 없기 때문에 마지막 창에 하위 보기를 추가할 수 없습니다.그래서 제가 찾은 가장 좋은 해결책은 UITextEffectsWindow 유형의 첫 번째 창에 하위 보기(또는 푸시 뷰 컨트롤러)를 추가하는 것입니다. 이 창은 액세서리 보기, navbar 등 모든 것을 다룹니다.
let myView = MyView()
myView.frame = UIScreen.main.bounds
guard let textEffectsWindow = NSClassFromString("UITextEffectsWindow") else { return }
let window = UIApplication.shared.windows.first { window in
window.isKind(of: textEffectsWindow)
}
window?.rootViewController?.view.addSubview(myView)
언급URL : https://stackoverflow.com/questions/21850436/add-a-uiview-above-all-even-the-navigation-bar
'source' 카테고리의 다른 글
Angular의 canLoad와 canActivated의 차이는 무엇입니까? (0) | 2023.04.27 |
---|---|
Bash 스크립트에 대한 매개 변수 유효성 검사 (0) | 2023.04.27 |
ASP에서 루트 도메인 URI를 가져오려면 어떻게 해야 합니까?NET? (0) | 2023.04.27 |
Angular를 사용하여 데이터 속성을 작성하려면 어떻게 해야 합니까? (0) | 2023.04.27 |
컨테이너 뷰 내에서 여러 뷰의 간격을 균등하게 지정합니다. (0) | 2023.04.27 |