视图显示在Debug View Hierarchy中,但不显示在device/sim上

Kyl*_*our 24 iphone xcode view uiview ios

这个问题让我很困惑.我有一个小的UIView我用来显示选择了哪个按钮.但是,它没有显示在我的应用程序中 - 它应该在"本地活动"下,但不会显示:

图片

那很好,我想,我只是调试视图层次结构,看看它在哪里!看起来它应该是它应该是的位置:

查看层次结构 3D视图 - 它是最重要的!

有谁知道这里会发生什么?谢谢您的帮助!

Won*_*ray 15

我没有关于为什么会发生这种情况的大量信息,但是花了几个小时才找到导致这种情况的原因,所以这可能有助于节省其他人一些时间:

我以编程方式在视图控制器中创建了两个子视图(Subview A和Subview B); 即使框架的大小和位置,alpha值以及所有其他常见的可见性问题都已检出,我的设备上也没有出现这两种情况.子视图A是视图控制器视图的子视图,子视图B是子视图A的子视图.我的设备上都没有看到,但是当我查看视图调试器层次结构时,我能够看到子视图B(即使它的超视图,子视图A,不可见).

简而言之,当我删除改变Subview A的图层掩码属性的代码时,问题就解决了.这是在图层上调用的确切方法:

extension CALayer {
    func round(corners: UIRectCorner, withRadius radius: CGFloat, withBounds: CGRect? = nil) {
        let path = UIBezierPath(roundedRect: withBounds ?? bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.mask = mask
    }
}
Run Code Online (Sandbox Code Playgroud)

我过去曾经使用过这种方法,没有任何问题,所以我确信这个问题在某种程度上是间接的,但也许这将指出将来有人朝着正确的方向发展.

编辑:

问题不仅仅是上面显示的代码,而是我在调用round()后改变Subview A的框架的事实.一旦我确定在给出其最终位置和大小之后只对Round()Subview A进行了解决,那么设备和调试器的所有问题都会得到解决.

  • 这确切的事情发生在我身上 (5认同)
  • 这也发生在我身上。对我有用的解决方案是将视图子类化,并在layoutSubviews()中进行圆角处理,如下所示:/sf/answers/1910567081/ (2认同)

Kyl*_*our 8

我很蠢 - 我修好了.我不确定为什么它在视图调试器中显示为顶部,但它落后于另一个UIView.

  • 我发生了这种情况,我在转换中重用了代码,将我的视图alpha设置为0 lol. (3认同)

Dav*_*d T 6

我在Xcode 9中遇到了同样的问题.我的原因是我在viewDidLoad中将视图的alpha设置为0,但没有将alpha设置回1.0.由于某种原因,Debug View Hierarchy显示了alpha为1.0的...

  • 同样在这里。对我来说,有一些屏幕动画将 alpha 设置为 0,这将使视图显示在视图调试器中而不是设备中。 (2认同)