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进行了解决,那么设备和调试器的所有问题都会得到解决.
我很蠢 - 我修好了.我不确定为什么它在视图调试器中显示为顶部,但它落后于另一个UIView.
我在Xcode 9中遇到了同样的问题.我的原因是我在viewDidLoad中将视图的alpha设置为0,但没有将alpha设置回1.0.由于某种原因,Debug View Hierarchy显示了alpha为1.0的...