这个问题让我非常困惑。我有一个小UIView,用来显示哪个按钮被选中。但是,它没有显示在我的应用程序中--它应该在“本地活动”下,但是没有显示:
这很好,我想,我只需要调试视图层次结构,看看它在哪里!它看起来就像它应该在的地方:第一次有人知道这里发生了什么吗?谢谢你的帮助!
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(),所有与设备和调试器有关的问题都解决了。
csbfibhn2#
我很笨-我修复了它。我不知道为什么它在视图调试器中显示为在顶部,但它在另一个UIView后面。
gkn4icbw3#
我在Xcode 9中也遇到了同样的问题。原因是我在viewDidLoad中将视图的alpha设置为0,但没有将alpha设置回1.0。出于某种原因,Debug View Hierarchy显示它的alpha为1.0...
dfddblmv4#
我也遇到了同样的问题,但当我重新布线我的插座,它又开始工作了。
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中执行,它就变得可见了。
B.height
layoutSubviews
5条答案
按热度按时间pgx2nnw81#
我已经找到原因了。
我以编程方式在视图控制器中创建了两个子视图(子视图A和子视图B);这两个视图都没有出现在我的设备上,尽管这些帧的大小和位置、alpha值以及所有其他常见的可见性问题都已检查完毕。子视图A是视图控制器视图的子视图,而子视图B是子视图A的子视图。这两个视图在我的设备上都不可见,但当我查看视图调试器层次结构时,我能够看到子视图B(尽管它的超级视图,子视图A,不可见)。
长话短说,当我删除更改Subview A层的mask属性的代码时,这个问题就得到了解决。
我在过去使用过这种方法,没有任何问题,所以我肯定这个问题是间接的,但也许这将在未来的正确方向指出有人。
编辑
这个问题不仅仅是上面显示的代码,还有我在调用round()后改变子视图A的帧的事实。一旦我确保在给出子视图A的最终位置和大小后只对它进行round(),所有与设备和调试器有关的问题都解决了。
csbfibhn2#
我很笨-我修复了它。我不知道为什么它在视图调试器中显示为在顶部,但它在另一个UIView后面。
gkn4icbw3#
我在Xcode 9中也遇到了同样的问题。原因是我在viewDidLoad中将视图的alpha设置为0,但没有将alpha设置回1.0。出于某种原因,Debug View Hierarchy显示它的alpha为1.0...
dfddblmv4#
我也遇到了同样的问题,但当我重新布线我的插座,它又开始工作了。
rqdpfwrv5#
在我的例子中,不可见的视图A有一个父视图B,并且有人将layer.mask设置为B
但是此时
B.height
等于0,所以我把这些代码放到layoutSubviews
中执行,它就变得可见了。