【问题标题】:I have a problem understanding the logic of how to work with autolayout我无法理解如何使用自动布局的逻辑
【发布时间】:2019-10-01 11:28:10
【问题描述】:

这是我的项目存储库:

https://github.com/alonsd/MoviesApi

我在这里给出整个项目的原因是因为问题存在于 .xib 文件中,而不是代码问题,因此我认为这将是我获得此问题帮助的更好方法。

当我尝试从我拥有的一些数据中填充表格视图中的自定义单元格时,我遇到了以下问题。

无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。

所以我在这个网站上寻找解决方案,发现了一个很好的调试方法来找出问题所在,我做了一个扩展,覆盖 NSLayoutDescription 的描述变量并打印出 id 和常量,以便更快更好地理解哪里问题出在哪里。所以显然,一旦我从 .xib 文件中的 img 中删除身高和体重,错误就会消失,但这会使图像从 .xib 中完全消失。我的布局方式具体有什么问题?我还尝试在我的 .xib 文件上使用“重置为建议的约束”,它使错误消失,但一旦我向上和向下滚动,它也会使每个单元格的高度都很大。

对于我面临的另一个问题 - 我想我不确定约束是如何工作的。那是因为当您查看我的 xib 文件时,您可以看到图像和单元格右端之间的主要空间,但在列表本身中没有任何内容,所以我对此感到非常困惑。

这是带有 tableview 的模拟器的图像 -

https://imgur.com/q0RWYAd

这是我的 .xib 文件的图像,其中的空格实际上没有出现在模拟器中 -

https://imgur.com/r3vnAe6

(我不知道如何将它们直接放在帖子中)

【问题讨论】:

  • 你错误地设置了约束,stackview也需要一些约束
  • 哪个约束是错误的?哪个 stackview 是缺少的约束?
  • 您还在详细视图中设置了错误的约束
  • 您能否更具体地说明问题所在?
  • 试试@Sh_Khan 回答它会解决你的问题

标签: ios swift tableview height nslayoutconstraint


【解决方案1】:

一般来说,您应该有 4 个约束。我有一段时间和你有同样的问题,对我来说,最好的解决方案是使用高度或宽度的百分比,然后是纵横比。例如,元素的高度将是视图的 20%,然后我使用宽高比作为宽度等。 也不要对所有 5 个元素使用 stackView。将电影图像留在 stackView 之外。

【讨论】:

  • 当你说 4 个约束时,你的意思是每个视图必须有 4 个关于它们所在堆栈的约束?或者每个故事板/xib 文件的约束总数应该是 4 个约束?在我看来,它们都不合乎逻辑,但我希望你能澄清一下。
  • 您应该对每个元素的高度、宽度、x 位置和 y 位置进行约束。
【解决方案2】:

1- 在此处删除宽度和高度限制

2- 在此处删除 containerView 前导约束

3-向stackview添加尾随约束

4- 向stackview前导常量添加一个值

5-选择所有标签并将垂直内容拥抱调整为1000

6- 选择 textContainer 堆栈并将间距设置为 20

【讨论】:

  • 它不起作用,因为它会在滚动时增加单元格的高度。
  • mondi 是正确的,此解决方案会产生 2 个问题 - 1 - 滚动时单元格的高度会增加 2 - 我在图像端和单元格的右端之间有一些小的边距
  • 我一直遵循您的解决方案到第 6 位,这就是我到目前为止得到的:imgur.com/Mb00evN
  • 它可以在滚动时单元格突然变高并且控制台中没有错误的情况下工作,但它似乎真的“挤压”在一起,所以我宁愿它会更高一点。还需要注意图片右侧的边距。如果您能解释我的错误以及您到目前为止所做的事情,我将非常感激。谢谢!
  • 如果你能帮我解决这个问题,那就太棒了
【解决方案3】:

问题是你使用了 StackView 但 stackveiws 也需要一些约束。

这是我用来获得结果的约束 我将 4 个元素放在堆栈视图中,并将图像提供给前导顶部宽度和高度

【讨论】:

  • 是的,先生,它会,但 OP 说它会增加单元格高度,但这个解决方案不会增加高度
  • 如果需要,它应该增加单元格高度
  • 我认为它不会增加单元格高度,因为我已经定义了标签和图像的高度
  • 这个解决方案对我的要求来说似乎有点过头了导致单元格高度变大的问题 - 唯一的解决方案是给它一个固定的高度,但是我得到了无法满足控制台中的约束的错误。
  • 我已经想出了如何解决这个问题,但还是非常感谢你
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多