【问题标题】:iOS dim background View full screeniOS暗淡背景查看全屏
【发布时间】:2016-10-08 00:26:01
【问题描述】:

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

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

Modal VC 作为子 VC 添加到父 VC。父 VC 位于 Navigation Controller 的顶部 (topViewController)

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

没什么用,昏暗的视图不会覆盖整个屏幕。

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

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

附:这是错误的描述:

。如果将模态VC(放置在Nav.Controller中的UITableVC)的视图直接添加到窗口中,视图会在从BG返回后显示移位的表格,即在BG中并开始从BG显示模态VC的情况下,之后切换回前台,表头的一部分(问题显示部分)向上移动,模态VC的导航栏被扩展,即它们相交,表头没有完全显示。我无法解决这个问题。

【问题讨论】:

    标签: ios uiview uinavigationcontroller uikit


    【解决方案1】:

    您可以添加视图并使其变暗,并将其作为子视图添加到 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()
        }
    }
    

    【讨论】:

      【解决方案2】:

      Swift 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)
      

      【讨论】:

        【解决方案3】:

        将您的视图放在导航控制器的视图下:

        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];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-19
          • 1970-01-01
          • 2016-01-25
          • 1970-01-01
          • 2011-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多