iOS昏暗的背景查看全屏

时间:2016-06-07 22:41:58

标签: ios uiview uinavigationcontroller uikit

我的问题应该很简单,但我找不到解决方案。

我正在显示模态VC,我想附加昏暗的背景视图。

将模态VC作为子项添加到父VC。父VC位于导航控制器(topViewController

的顶部

将昏暗视图添加到UIScreen.windows.first!窗口。但昏暗的视图并没有填满整个屏幕。我为原点设置了CGPointZero的框架,我尝试了负y值它没有帮助。它看起来像这样。 我还添加了一组自动布局约束,设置为false / true translatesAutoresizingMaskIntoConstraints属性,更改为clipToBounds

没有任何帮助,昏暗的视图不会覆盖整个屏幕。

Wrong display of dim view

我可以全屏显示昏暗的视图,如果我不作为孩子添加模态VC,即我直接使用模态VC的视图,并将其添加到window。它看起来很好,但还有另一个bug。这就是为什么我要添加模态VC,作为一个孩子VC。 如何强制昏暗的视图显示整个屏幕。

在应用程序中可能会同时显示几个模态VC,这就是为什么seques(即VC的呈现)不是最佳选择。

enter image description here

P.S。以下是错误的描述:

。如果将模态VC(UITableVC放入导航控制器)的视图直接添加到窗口,则视图在从BG返回后显示移位表,即在BG中并且开始从BG显示模态VC之后切换回Foreground,表格标题的一部分(问题显示部分)向上移动并且模态VC的导航栏被展开,即它们相交,表格的标题未完全显示。我无法解决这个问题。

3 个答案:

答案 0 :(得分:0)

将您的视图置于导航控制器的视图下:

UIView *dimView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
dimView.backgroundColor = [UIColor colorWithWhite:.4f alpha:.5f];
[self.navigationController.view addSubview:dimView];
[self.navigationController.view bringSubviewToFront:dimView];

答案 1 :(得分:0)

迅速4更新

let dimView = UIView(frame: UIScreen.main.bounds)
dimView.backgroundColor = UIColor(white: 0.4, alpha: 0.5)
self.navigationController!.view.addSubview(dimView)
self.navigationController!.view.bringSubviewToFront(dimView)

答案 2 :(得分:0)

您可以添加视图并使其变暗,并将其作为子视图添加到 UINavigationController ,状态栏如下:

// Dim navigation bar
let navDimView = UIView(frame: (self.navigationController?.navigationBar.bounds)!)
navDimView.restorationIdentifier = "navDimView"
navDimView.backgroundColor = UIColor.black.withAlphaComponent(0.6)
self.navigationController?.navigationBar.addSubview(navDimView)

// Dim status bar
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
let wFrame = window?.windowScene?.statusBarManager?.statusBarFrame
let statusBarView = UIView(frame: wFrame!)
statusBarView.restorationIdentifier = "statusBarView"
statusBarView.backgroundColor = UIColor.black.withAlphaComponent(0.6)
window?.addSubview(statusBarView)

如果你想恢复它,你可以做如下:

// Revert navigation bar back to normal
for subview in self.navigationController!.navigationBar.subviews {
    if subview.restorationIdentifier == "navDimView" {                
        subview.removeFromSuperview()
    }
}
// Revert status bar back to normal
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
for subview in window!.subviews {
    if subview.restorationIdentifier == "statusBarView" {
        subview.removeFromSuperview()
    }
}