【问题标题】:bringSubview(toFront:) seems not workingbringSubview(toFront:) 似乎不起作用
【发布时间】:2019-07-14 16:41:01
【问题描述】:

我有以下布局。

我想要实现的是将黄色子视图设为圆形并将其放在前面。我尝试了self.view.bringSubview(toFront:yellowView),但似乎没有按预期工作。我该如何解决这个问题?

-- 编辑 抱歉没有详细说明。

所以在根视图上,我有两个子视图,顶部和底部。 底部暂时是空的,但顶部包含一个与顶部相同大小的 imageview 和一个圆形 UIView。

所以我想要的是把圆形 UIView 的底部放在前面。

【问题讨论】:

  • 你的黄色视图是视图的子视图还是 imageView?
  • @vacawama 有一个包含图像视图和圆形视图的容器视图。我只是将图像视图设置为与其父视图相同的大小。
  • 您需要提供更多详细信息...生成圆圈的代码是什么?什么是视图层次结构?圆形、黄色方形和图像视图都是单个 UIView 的子视图吗?还是所有个人观点?什么是灰色矩形?另一种观点?如果你不解释你有什么,很难提供帮助......
  • 您是否使用视图层次结构进行检查?
  • @DonMag 已编辑。

标签: ios swift


【解决方案1】:

您的问题是圆圈UIView 不是根视图的子视图,而是顶视图的子视图。为了让圆圈出现在底部视图的前面,请重新排列视图层次结构。

使圆圈UIView 成为根视图的子视图。然后,您将能够使用您显示的代码将它带到其他视图的前面。事实上,如果你让圆圈UIView 成为根视图的最后一个子视图,它将出现在根视图的所有子视图的前面。

所需的视图层次结构:

Root View
    - Top View
        - UIImageView
    - Bottom View
    - Circle View

文档大纲中,将圆形视图拖放到根视图上。

【讨论】:

  • 谢谢。但是你知道为什么之前的尝试没有奏效吗?即使我将 clipsToBound 设置为 false?
  • 是的。底视图位于顶视图及其所有子视图的前面。由于没有覆盖顶视图,所以显示了 UIImage,但延伸到底部区域的圆圈被底视图覆盖。
  • 因此,您可以将顶视图放在根视图的前面,然后将圆形视图放在顶视图的前面。但是,我仍然认为圆形视图最好将根视图作为其父视图。
  • 完美。我同意您的解决方案是正确的。感谢百万次。
【解决方案2】:

如果您的 circleViewimageViewsubviewcontainerView 然后试试这段代码。

self.containerView.bringSubview(toFront:yellowView)

【讨论】:

  • 你能看看我编辑过的原始问题吗?谢谢。
【解决方案3】:

将 UIImageView 的 clipBounds 属性设置为 false:

self.imageView.clipsToBounds = false

【讨论】:

  • 这不起作用?我在问题中没有提到的一件事是容器视图包括图像视图和圆形视图。我尝试了容器视图和图像视图都将 clipsToBounds 设置为 false,但它不起作用。
【解决方案4】:

你必须从它的父视图调用bringSubview。 试试这个;

self.yellowView.superview?.bringSubview(toFront: self.yellowView)

如果需要,您可以为 YellowView.superview 添加插座。

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2016-02-01
    • 2020-09-23
    • 2010-12-05
    • 2011-06-14
    • 2015-01-10
    • 2016-02-24
    • 2011-01-18
    • 2018-06-20
    相关资源
    最近更新 更多