xcode 视图显示在调试视图层次结构中,但不在设备/sim上

hiz5n14c  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(108)

这个问题让我非常困惑。我有一个小UIView,用来显示哪个按钮被选中。但是,它没有显示在我的应用程序中--它应该在“本地活动”下,但是没有显示:

这很好,我想,我只需要调试视图层次结构,看看它在哪里!它看起来就像它应该在的地方:
第一次
有人知道这里发生了什么吗?谢谢你的帮助!

pgx2nnw8

pgx2nnw81#

我已经找到原因了。
我以编程方式在视图控制器中创建了两个子视图(子视图A和子视图B);这两个视图都没有出现在我的设备上,尽管这些帧的大小和位置、alpha值以及所有其他常见的可见性问题都已检查完毕。子视图A是视图控制器视图的子视图,而子视图B是子视图A的子视图。这两个视图在我的设备上都不可见,但当我查看视图调试器层次结构时,我能够看到子视图B(尽管它的超级视图,子视图A,不可见)。
长话短说,当我删除更改Subview A层的mask属性的代码时,这个问题就得到了解决。

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
    }
}

我在过去使用过这种方法,没有任何问题,所以我肯定这个问题是间接的,但也许这将在未来的正确方向指出有人。

编辑

这个问题不仅仅是上面显示的代码,还有我在调用round()后改变子视图A的帧的事实。一旦我确保在给出子视图A的最终位置和大小后只对它进行round(),所有与设备和调试器有关的问题都解决了。

csbfibhn

csbfibhn2#

我很笨-我修复了它。我不知道为什么它在视图调试器中显示为在顶部,但它在另一个UIView后面。

gkn4icbw

gkn4icbw3#

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

dfddblmv

dfddblmv4#

我也遇到了同样的问题,但当我重新布线我的插座,它又开始工作了。

rqdpfwrv

rqdpfwrv5#

在我的例子中,不可见的视图A有一个父视图B,并且有人将layer.mask设置为B

CAGradientLayer *layer = [CAGradientLayer layer];
CGFloat ratio = 0.05;

layer.frame = CGRectMake(0, 0, kScreenWidth, B.height);
layer.colors = @[(__bridge id)[[UIColor blackColor] colorWithAlphaComponent:0.0].CGColor, (__bridge id)[UIColor blackColor].CGColor];
layer.locations = @[@0, @(ratio), @1];

B.layer.mask = layer

但是此时B.height等于0,所以我把这些代码放到layoutSubviews中执行,它就变得可见了。

相关问题