【问题标题】:New auto layout errors with Xcode 8.1Xcode 8.1 出现新的自动布局错误
【发布时间】:2017-03-17 05:38:42
【问题描述】:

我有一个运行良好的 macOS 应用程序,直到我升级到 Xcode 8.1。

应用打开与NSOpenPanel 的对话,以允许用户选择图像。当我选择图像并选择“打开”时,出现以下错误:

2016-11-03 10:23:25.589283 PA 地点数据[9008:265214] [布局] 检测到 NSTextField 缺失的约束:0x6000001e3a00。它 不能放置,因为没有足够的约束来完全 定义大小和原点。添加缺少的约束或设置 translatesAutoresizingMaskIntoConstraints=YES 和约束将是 为您生成。如果在 macOS 10.12 上手动布局此视图 之后,您可以选择不从您的 覆盖。在 DETECTED_MISSING_CONSTRAINTS 上设置断点进行调试。 此错误只会记录一次。

打开的对话随即冻结且无法关闭。

按照建议,我为DETECTED_MISSING_CONSTRAINTS 设置了一个断点,并在此代码中发现myPopup.runModal() 处的执行正在停止:

func happyAlert(message: String, info: String) {
    let myPopup: NSAlert = NSAlert()
    myPopup.messageText = message
    myPopup.informativeText = info
    myPopup.alertStyle = NSAlertStyle.informational
    myPopup.addButton(withTitle: "OK")
    myPopup.runModal()
}

此警报通知用户图像已通过或未通过各种验证检查。

过去发生的情况是图像被选中,NSOpenPanel 被关闭并且警报出现没有任何问题。

现在我收到有关 NSTextField 约束的错误,但我不明白为什么会在此处涉及它们,尤其是因为 Xcode 没有标记底层视图的任何自动布局问题。

谁能解释可能发生的情况和/或进一步调试的策略?我的经验有限,我很困惑。

【问题讨论】:

  • 经过一番搜索,这个问题似乎与我升级到的 OS 10.12 有关,但上面没有说明。 openradar.appspot.com/28700495
  • 这里也发生了 NSAlert:2016-12-19 19:53:32.717529 TreeTest[1668:47124] [Layout] 检测到 缺少约束。无法放置,因为没有足够的约束来完全定义大小和原点。添加缺少的约束,或设置 translatesAutoresizingMaskIntoConstraints=YES 并且将为您生成约束。如果此视图在 macOS 10.12 及更高版本上手动布局,您可以选择不从覆盖中调用 [super layout]。在 DETECTED_MISSING_CONSTRAINTS 上设置断点进行调试。此错误只会记录一次。
  • 我遇到了同样的问题,但它与打开的对话框无关。确保您的问题也不是。
  • @PeterWiley 你试过锚点吗?
  • myPopUp.translatesAutoresizingMaskIntoConstraints= true

标签: swift macos cocoa autolayout nsalert


【解决方案1】:

在界面构建器中检查您的视图层次结构,可能是 textField 位于所有内容之上,而 Xcode 正在尝试为其设置约束。否则,也许可以添加一些故事板中正在发生的事情的屏幕截图。 您是否尝试将有问题的文本字段的宽度和高度从 = 设置为 >= 设置的值?过去我遇到过这样的问题,即这样一个愚蠢的设置已经排序了一个类似于这个的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 2014-11-27
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多