【问题标题】:Subview on top of window view in SwiftSwift中窗口视图顶部的子视图
【发布时间】:2016-11-27 03:54:32
【问题描述】:

我想在整个屏幕(包括导航栏)上放置一个 UIView。此视图将为黑色,不透明度为 0.3。我想这样做以使屏幕内容变暗并在此之上推送一个视图。我正在使用此代码:

UIApplication.sharedApplication().keyWindow?.addSubview(darkView)

这按预期覆盖了整个屏幕。但是,我现在想在这个黑暗视图之上放置另一个视图。有没有办法做到这一点?我尝试的一切都只会导致视图处于黑暗视图下。任何指针将不胜感激!谢谢

【问题讨论】:

  • 你需要展示你尝试过的代码
  • 你为什么不从你当前的控制器中展示一个半透明的全屏控制器?如果您认为需要向窗口添加视图,那么您可能做错了。
  • 您应该使用自定义过渡来实现这一点,而不是这样。

标签: ios swift uiview


【解决方案1】:

真的很简单。

您只需向window 添加另一个视图!它会在那里,在您添加的第一个视图之上。例如,这段代码添加了一个黑色视图和一个白色视图:

let window = UIApplication.sharedApplication().keyWindow!
let v = UIView(frame: window.bounds)
window.addSubview(v)
v.backgroundColor = UIColor.blackColor()
let v2 = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 50))
v2.backgroundColor = UIColor.whiteColor()
window.addSubview(v2)

您还可以将新视图添加为您添加的第一个视图的子视图:

let window = UIApplication.sharedApplication().keyWindow!
let v = UIView(frame: window.bounds)
window.addSubview(v)
v.backgroundColor = UIColor.blackColor()
let v2 = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 50))
v2.backgroundColor = UIColor.whiteColor()
v.addSubview(v2)

斯威夫特 4

let window = UIApplication.shared.keyWindow!
let v = UIView(frame: window.bounds)
window.addSubview(v)
v.backgroundColor = .black
let v2 = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 50))
v2.backgroundColor = UIColor.white
v.addSubview(v2)

简单!

【讨论】:

  • 谢谢你,但是有没有一种方法可以将现有视图控制器中的视图带到窗口中视图的前面而不直接添加它?
  • @Kex 不,就我而言。
  • 在我的情况下 UIView 没有覆盖整个屏幕。
  • 在展示alert view之后,当我们要展示popupwindowView的时候,就是放错地方了。
  • 需要把window变量改成-----let window = UIApplication.shared.windows.last!
【解决方案2】:

对于 SWIFT 3,请使用:

let window = UIApplication.shared.keyWindow!
window.addSubview(someView)

【讨论】:

    【解决方案3】:

    斯威夫特 4, 将 UIViewController 作为子视图添加到 UIWindow

    此代码用于将视图控制器添加为子视图,用简单的动画覆盖整个窗口。

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    var customReviewPopup = ReviewPopupViewController.init(nibName: "ReviewPopupViewController", bundle: Bundle.main)
    
    self.appDelegate.window?.addSubview((customReviewPopup.view)!)
    self.customReviewPopup.view.frame = (self.appDelegate.window?.bounds)!
    self.customReviewPopup.view.alpha = 0
    self.customReviewPopup.view.isHidden = true
    
    UIView.animate(withDuration: 0.3, delay: 0, options: .transitionCrossDissolve, animations: {
        self.customReviewPopup.view.isHidden = false
        self.customReviewPopup.view.alpha = 1
    }, completion: nil)
    

    【讨论】:

    • 在展示alert view之后,当我们要展示popupwindowView的时候,就是放错地方了。
    【解决方案4】:

    斯威夫特 5:

    let window = UIApplication.shared.windows.last!
    
    let viewToShow = UIView(frame: CGRect(x: 0, y: 0, width: window.frame.size.width, height: 40.0))
    
    viewToShow.backgroundColor = UIColor.white
    
    window.addSubview(viewToShow)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多