如何在 Xcode 视图层次结构中拥有深度视图?

Posted

技术标签:

【中文标题】如何在 Xcode 视图层次结构中拥有深度视图?【英文标题】:How to have views with depth in Xcode view hierarchy? 【发布时间】:2020-01-09 10:38:17 【问题描述】:

我目前正在尝试重现 UIPickerView 的行为,自己从头开始编写。

它的一个方面是我无法重现的,那就是出现在 Xcode 的 Debug View Hierarchy 选项卡上的具有深度的“视图”(下图)。我引用了视图词,因为我不知道它是否是UIView。它在 Debug View Hierarchy 选项卡中不可选择,但我可以将光标悬停在它上面,它会变成紫色突出显示颜色,如图所示。

我的猜测是某种CALayer,所以我尝试了以下方面的多种不同组合:

CATransformLayer m34 的值 CATransform3D 旋转/平移变换 CALayer's zPosition

但是,使用这些修改完成的所有绘图都会按预期投影到二维中。

查看层次结构树,似乎这个 3D 框是 UIPickerTableView 的子级。其中的单元格类型为UIPickerTableViewTitledCell。这两种类型似乎都是内部的。我还没有尝试使用普通的表格或集合视图,因为我认为普通的CALayer 自定义应该能够完成这项工作。

有没有办法重现它?

这张图片是通过在普通的UIViewControllerview 上添加UIPickerView 生成的,在模拟器上运行项目,然后单击Xco​​de 上的Debug View Herarchy 按钮。

【问题讨论】:

【参考方案1】:

我想这只是 XCode 的一个内置可视化功能,特别是对于 UIPickerView 及其子类(或者可能对于其他一些类似的视图)。如果你聚焦得更深,这个立方体会消失,你会看到这些转换后的标签层(这在 XCode 11 中工作得不是很好,尽管有聚焦)。

另一个例子,在 Reveal(AppCode 的可视化工具)中,您将看到没有此 3D 可视化的视图框架(蓝色框架)及其转换层(填充框架),并且整个选取器视图看起来很平坦

【讨论】:

所以我想我自己的视图在调试器中总是会受到正交投影的影响,但 UIKit 内置有时不会?感谢您的回复! @LucasBarbosa 我认为是的,除非你从那些“启用投影”的视图继承,例如在我的 UIPickerView 子类中这个技巧有效

以上是关于如何在 Xcode 视图层次结构中拥有深度视图?的主要内容,如果未能解决你的问题,请参考以下文章

XCode Interface builder缺少视图层次结构

iOS 中深度嵌套的视图层次结构可以吗?

尝试呈现其视图不在窗口层次结构中的 UIAlertController (Swift 3/Xcode 8)

直接从任何地方呈现深度嵌套的视图控制器,同时保留层次结构

如何在 Xcode 4.1.1 中拥有多个横向视图

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController