将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置

Posted

技术标签:

【中文标题】将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置【英文标题】:Adding UIView's as subviews and determining their position in the view hierarchy in Swift 【发布时间】:2016-12-01 19:27:50 【问题描述】:

我正在使用一个名为 SAConfettiView 的 Swift 库:https://github.com/sudeepag/SAConfettiView

我想在我的视图层次结构的顶部添加一个“confettiView”,这样它就不会被其他任何东西阻挡,但我仍然希望 UIButton、UITableViewCell 等是可选的,我该如何在代码中做到这一点?

下面是我目前使用的代码:

override func viewDidLayoutSubviews() 
    // Create confetti view
    confettiView = SAConfettiView(frame: self.view.bounds)

    // Set colors (default colors are red, green and blue)
    confettiView.colors = [UIColor(red:0.95, green:0.40, blue:0.27, alpha:1.0),
                           UIColor(red:1.00, green:0.78, blue:0.36, alpha:1.0),
                           UIColor(red:0.48, green:0.78, blue:0.64, alpha:1.0),
                           UIColor(red:0.30, green:0.76, blue:0.85, alpha:1.0),
                           UIColor(red:0.58, green:0.39, blue:0.55, alpha:1.0)]

    // Set intensity (from 0 - 1, default intensity is 0.5)
    confettiView.intensity = 1

    // Set type
    confettiView.type = .Diamond

    // For custom image
    // confettiView.type = .Image(UIImage(named: "diamond")!)

    // Add subview
    view.addSubview(confettiView)
    confettiView.startConfetti()

【问题讨论】:

【参考方案1】:

不检查第三方代码,但如果编写正确,您可以 - 至少 - 使用“UIView.bringSubview(ToFront:UIView)”。

当然,如果五彩纸屑真的你的层次结构的顶部,它是 - 意思是,它没有被阻碍。

【讨论】:

只是为了确认当我说视图层次结构的顶部时,我的意思是屏幕上最顶部的项目(我说“顶部”可能是错误的)。 如果它在屏幕的最上方,那么它可能会干扰触摸,对吧?它似乎是一个 UIView,它将成为最顶层的 Z 层。可能你能做的最好的事情就是添加你的 UIButtons,这样它们就不会被阻挡 - 无论是在这个五彩纸屑 UIView 没有阻挡的地方,还是作为五彩纸屑 UIView 中的一个子视图。我想我可以说我知道你想要什么......但你能说你看到了一个有效的例子吗? 它确实会干扰触摸,我还没有看到在所有其他视图前面只有“五彩纸屑”的例子。

以上是关于将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置的主要内容,如果未能解决你的问题,请参考以下文章

UIView:将 UIViewController 的视图添加为子视图并将其删除

将 `UIView` 添加为子视图最初很慢

将元素添加为子视图后,元素位置发生变化

自定义 UIView(.xib) 在 UITableViewCell 中添加为子视图后自动更改框架

如何在 Swift 中将内容包装为自定义视图

WKWebView 添加为子视图