Nic*_*Roy 174 uinavigationbar popupwindow uiviewcontroller ios
我希望在任何其他视图之上显示甚至导航栏,这是一种看起来像这样的"弹出"视图:
UIViewController下面的其他.UIView中间的窗口有一些信息,(如果你想知道一切,日历).为此,我创建了一个包含两个UIViews(背景和窗口)的UIViewController,我正在尝试显示它.我试过一个简单的[mySuperVC addSubview:myPopUpVC.view],但我仍然有上面的导航栏.
我试图将它作为模态呈现,但是UIViewController底层消失了,我失去了透明效果.
任何想法,我相信这很简单......
谢谢!
Rom*_*om. 188
您可以通过将视图直接添加到keyWindow来实现:
UIView *myView = /* <- Your custom view */;
UIWindow *currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:myView];
Run Code Online (Sandbox Code Playgroud)
dal*_*lef 128
[self.navigationController.view addSubview:overlayView]; 是你真正想要的
Nam*_*Nam 104
这是一个适合我的简单优雅的解决方案.您可以将导航栏的z位置设置为视图下方:
self.navigationController.navigationBar.layer.zPosition = -1;
Run Code Online (Sandbox Code Playgroud)
记得在完成后将其设置为0.
Kev*_*OUX 58
检查响应的Swift版本:
斯威夫特4:
let view = UIView()
view.frame = UIApplication.shared.keyWindow!.frame
UIApplication.shared.keyWindow!.addSubview(view)
Run Code Online (Sandbox Code Playgroud)
Swift 3.1:
let view = UIView()
view.frame = UIApplication.sharedApplication().keyWindow!.frame
UIApplication.sharedApplication().keyWindow!.addSubview(view)
Run Code Online (Sandbox Code Playgroud)
Ras*_*had 22
将您的视图添加为NavigationController的子视图.
[self.navigationController.navigationBar addSubview: overlayView)]
Run Code Online (Sandbox Code Playgroud)
您也可以在窗口上添加它:
UIView *view = /* Your custom view */;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window addSubview:view];
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.. :)
All*_*ome 20
Dalef在swift中的出色解决方案:
self.navigationController?.view.addSubview(view)
Run Code Online (Sandbox Code Playgroud)
小智 8
Swift版@Nicolas Bonnet的答案:
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
}
Run Code Online (Sandbox Code Playgroud)
不要忘记窗口必须是强大的属性,因为原始答案会导致窗口立即释放
我建议你创建一个新的UIWindow:
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];
Run Code Online (Sandbox Code Playgroud)
然后,您可以在其他UIViewController中管理您的视图.要删除窗口:
[window removeFromSuperview];
window = nil;
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
有多种方法可以做到:
1-添加您UIView的电话UIWindow而不是添加它UIViewController.这样它就会成为一切.
[[(AppDelegate *)[UIApplication sharedApplication].delegate window] addSubview:view];
Run Code Online (Sandbox Code Playgroud)
2-使用自定义转换,使你的UIViewController在后面显示0.5 alpha
为此,我建议你看看:https://github.com/Citrrus/BlurryModalSegue
如果您只想显示自定义视图,则navigationBar @Nam的答案非常有用,但是如果您的自定义视图需要用户交互,则需要禁用的交互。
self.navigationController.navigationBar.layer.zPosition = -1
self.navigationController.navigationBar.isUserInteractionEnabled = false
Run Code Online (Sandbox Code Playgroud)
就像Nam的回答中所说的,不要忘记扭转这些变化:
self.navigationController.navigationBar.layer.zPosition = 0
self.navigationController.navigationBar.isUserInteractionEnabled = true
Run Code Online (Sandbox Code Playgroud)
extension UINavigationBar {
func toggle() {
if self.layer.zPosition == -1 {
self.layer.zPosition = 0
self.isUserInteractionEnabled = true
} else {
self.layer.zPosition = -1
self.isUserInteractionEnabled = false
}
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样简单地使用它:
self.navigationController.navigationBar.toggle()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119653 次 |
| 最近记录: |