如何以编程方式更改名称以区分 Xcode 可视化调试器中的 UIView?

问题描述 投票:0回答:2

如何在 Xcode 可视化调试器中重命名视图? 这是一片 UIView 的海洋,所以几乎不可能分辨出哪个 uiview 是一个约束。

UIViewControllers 显示标题,而 UIViews 除非它是派生类 这是 UIView。你如何区分它们?

案例切中要害

这似乎是如何在 Xcode 4.5/iOS 中设置 UIView 的标识符以调试自动布局的重复?

ios xcode debugging
2个回答
6
投票

按住 Control 键单击相关视图,然后在上下文菜单中选择打印说明:

<UIView: 0x7fbec8508420; frame = (30 34; 163 117); autoresize = RM+BM; 
    layer = <CALayer: 0x6000019c65c0>>

通常这足以识别视图。如果不是,您可以询问视图问题,尽管语法有点棘手:

(lldb) expr -l objc -O -- [(UIView*)0x7fbec8508420 backgroundColor]
<UIDynamicModifiedColor: 0x6000017c6f10; contrast = normal, 
    baseColor = <UIDynamicSystemColor: 0x6000019c6600; name = systemYellowColor>>


我有时使用的另一个技巧是给视图一个标识符。一个鲜为人知的技巧是,图层有一个

name
,您可以随意使用。视图有一个层。所以我宣布延期:

extension UIView {
    @objc var name : String? { return layer.name }
}

现在您可以向视图询问其

name
。您可以在代码中或(使用运行时属性)在故事板中分配名称。


自从我最初给出这个答案以来,我为视图命名并在视图调试器中查看它的技术已经有所发展,所以我想展示它现在的样子:

extension UIView {
    @objc var debugName: String {
        get { layer.name ?? "" }
        set { layer.name = newValue }
    }
    open override var debugDescription: String {
        var proposedDescription = description
        if !debugName.isEmpty {
            proposedDescription.insert(
                contentsOf: "; name = '\(debugName)'",
                at: proposedDescription.index(proposedDescription.endIndex, offsetBy: -1)
            )
        }
        return proposedDescription
    }
}

这很酷的原因是,当您打印描述时,在视图调试期间,调试名称会“自动”显示在 Xcode 控制台中。我无法描述它有多么有用。与约束标识符一起,您可以轻松地弄清楚到底发生了什么。


0
投票

bottomView.accessibilityIdentifier = "Bottom view"

它将任何控件的显示名称更改为配置的accessibilityIdentifier:

”,

© www.soinside.com 2019 - 2024. All rights reserved.