【问题标题】:Y Constraint missing in Vertical StackView垂直 StackView 中缺少 Y 约束
【发布时间】:2017-04-17 11:01:25
【问题描述】:

我有一个 UITableViewCell,其中有一个嵌入式 UIStackView。一切正常,在手机和 iPad 上看起来都很好。但是,我在 StoryBoard 中遇到了很多奇怪的错误,我不知道我是否可以忽略它们。通常,我讨厌无视警告。但是在这种情况下可以吗?我的表格单元格设置如下:

UITableViewCell
 - Content View
 -- View (named outerView)
 --- View (named dateView for top banner color)
 --- UIStackView (vertical, named mainStackView, pinned to neighbors)
 ---- UIButton (A)
 ---- UIView (B)
 ---- UIStackView (C, horizontal)
 ---- UIStackView (D, horizontal)
 ---- UILabel (E)
 ---- UIButton (F)

mainStackView(字母 A-F)下的所有内容都在 StoryBoard 中显示错误,它们“需要约束:Y 位置或高度”。但是,根据 Apple documentation,它表示如果 UIStackView 是垂直方向,它们将处理所有约束和垂直对齐。就像我说的那样,它工作正常,并且排列的子视图可以折叠/隐藏,并且没有其他警告。我只是不喜欢发送充斥着警告的代码。我可以做些什么来解决这个问题,或者这是一个已知问题?

更新:这是下面评论要求的 MCVE。单击here 并解压缩文件夹以获取仅可在Interface Builder 中运行的基本项目。

【问题讨论】:

  • 根据您与我们分享的内容,我无法重现您的问题。如果我们无法重现您的问题,则很难解决问题。也许您可以创建一个MCVE,即从空白项目开始,然后添加一个表格视图和单元格来重现您描述的警告。然后您可以与我们分享该项目。
  • @Rob - 我更新了它以包含 MCVE
  • 您收到编译时警告还是运行时警告?我在 Xcode 8.1 (8B62) 中没有收到编译时警告。当我尝试运行它时,显然您没有包含视图控制器或单元类,但是当我添加它们时,它运行良好,但为了避免运行时警告,我将以下几行放入 @ 的 viewDidLoad 987654327@ 子类:self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 222;.
  • @Rob - 我有相同版本的 xcode。它们会导致编译时警告。运行时一切正常。这是我所看到的screenshot
  • 让我们看看是否有其他人可以重现这些警告,因为我没有看到它们。我可能会建议找到派生数据文件夹,退出 Xcode,清除该文件夹并重新启动 Xcode,以确保。但是如果你在你的主项目和你的 MCVE 问题中看到了这个,我并不乐观这会解决它。也可能重新启动。

标签: ios uistoryboard nslayoutconstraint uistackview


【解决方案1】:

我解决这个问题的方法是:

  1. 将主堆栈视图的底部约束移除到 SuperView 的底部,以便仅固定 3 个边。

  1. 调整表格单元格的行高。虽然它是基于标签/按钮高度的动态高度单元格,但我想它仍然需要是界面生成器中的“正确”高度?

我必须使用选项 2,因为如果我执行选项 1,我的表格单元格会消失,因为它不知道单元格要使用的高度。

同样值得重申的是,之前的代码仍然可以正常工作,只是出现了编译警告。我不知道为什么尽管处于同一级别的 Xcode 上,但没有其他人可以看到它们。现在开始尝试恢复我的 3 天,并针对代码中的警告处理我的强迫症。

【讨论】:

    【解决方案2】:

    垂直堆栈视图也有类似的问题。 我通过为任何子视图(在我的情况下为水平堆栈视图)提供高度约束并在构建时将其删除来解决它的方式。 我也在你的 MCVE 上试过这个,它成功了。

    注意:这当然是一个 hack,但它解决了问题。

    【讨论】:

    • 谢谢!我发现你可以给高度约束优先级为 1。不需要在运行时删除它。这似乎也是如此。
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2019-10-22
    • 2014-08-22
    相关资源
    最近更新 更多