您可以在不使用情节提要的情况下在AutoLayout控制台输出中标记视图吗?

加勒特·迪斯科

我正在看WWDC关于AutoLayout的谈话,并且我了解到,在视图上设置StoryboardID会使控制台输出的约束冲突更容易阅读(即,您得到一个名称而不只是一个地址)。他们向您展示了在Interface Builder中在何处设置StoryboardID(以前只是“标识符”),但是有没有办法在代码中进行设置?我正在尝试在一个100%编程的,具有许多无法满足的约束的应用程序中调试我自己未编写的大量复杂视图,并且(在某种程度上)在iOS 7中工作但在iOS中开始崩溃8.我希望清楚了解<UIView:0x8675309>实际上是引起问题的原因。

我查看了UIView类引用,没有找到“标识符”或“ StoryboardID”。

如果答案是“不”,也不会太惊讶。毕竟,将其称为情节提要ID是有原因的。但是,我希望能收到一个确认和一个解决方法,以使AutoLayout控制台转储更具可读性。

马特

我希望清楚了解实际上是引起问题的原因。

我有两个建议。

  1. 在Xcode中,在应用程序的同一次运行期间(最好在获得有关约束的控制台转储后立即运行),选择Debug-> View Debugging-> Capture View Hierarchy。

    该应用程序暂停,并显示视图层次结构。选择一个视图,然后在对象检查器中显示其内存地址。当您找到地址为的地址时0x8675309,就是那个地址另外,您还可以在“大小”检查器中看到将该视图定位的约束。

  2. 实现我在书中提供的约束记录器实用程序。第二篇报告了视图层次结构以及标识符和约束。

这是实用程序;在他们之间,我节省了数小时的困惑:

extension NSLayoutConstraint {
    class func reportAmbiguity (var v:UIView?) {
        if v == nil {
            v = UIApplication.sharedApplication().keyWindow
        }
        for vv in v!.subviews as [UIView] {
            println("\(vv) \(vv.hasAmbiguousLayout())")
            if vv.subviews.count > 0 {
                self.reportAmbiguity(vv)
            }
        }
    }
    class func listConstraints (var v:UIView?) {
        if v == nil {
            v = UIApplication.sharedApplication().keyWindow
        }
        for vv in v!.subviews as [UIView] {
            let arr1 = vv.constraintsAffectingLayoutForAxis(.Horizontal)
            let arr2 = vv.constraintsAffectingLayoutForAxis(.Vertical)
            NSLog("\n\n%@\nH: %@\nV:%@", vv, arr1, arr2);
            if vv.subviews.count > 0 {
                self.listConstraints(vv)
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用情节提要的情况下在UITableView中使用静态单元格?

在不使用情节提要的情况下使用Swift通过View控制器传递数据

如何在不使用标签栏控制器的情况下在情节提要之间切换

在不使用文本文件的情况下在控制台日志中显示 gzip

您可以在不使用服务器的情况下在本地生成HTML吗?

如何在不使用情节提要的情况下创建新的Swift项目?

如何在不使用 geth 控制台的情况下在现有仲裁网络中添加新对等点?

在不使用桌面软件的情况下在线执行Git命令(基于Web的终端/控制台)?

我可以使用情节提要板将UINavigationController的视图嵌入UIViewController内吗?

我可以在不使用objectAtIndex的情况下阅读视图控制器吗?

您可以在没有任何库的情况下在 Google Colab 中使用 GPU 吗?

如何在不使用segue的情况下在视图控制器之间传递图像

如何在不使用情节提要的情况下将 Google Maps Platform SDK for iOS 与 Xcode 项目一起使用?

如何在不使用控制台的情况下从Intellij推送Git TAG?

如何在不使用Firebase控制台的情况下发送推送通知

如何在不使用Firebase控制台的情况下发送Firebase Cloud Messaging通知?

UITextView高度可以在键入/不使用情节提要时动态更改

我可以在不使用Apollo的情况下在反应中使用graphql吗?

我可以在不使用控制器的情况下从laravel中的href标签返回视图吗?

iOS使用情节提要推送视图控制器时传递数据

使用通用情节提要板时,dismissViewController不会关闭呈现的视图控制器

使用情节提要中的私有属性初始化视图控制器

推送segue之后(使用情节提要segues)从导航堆栈中删除视图控制器

使用情节提要IOS7将UIview控制器显示为子视图

您可以在不使用 OAuth 的情况下使用 StockTwits api 吗?

ASP.NET Core MVC 是否可以在不使用控制器的情况下在新选项卡中打开视图?

当我不使用情节提要时,是否可以在必需的init中出现fatalError?(编码器aDecoder:NSCoder)吗?

如何用代码添加UIView?不使用情节提要

在没有情节提要的情况下更改视图控制器