首页 > 解决方案 > TableView 为动态宽度和高度标签计算错误的高度

问题描述

我已经阅读了有关此的多个线程,但我还没有找到解决方案。

我正在制作一个类似聊天的应用程序


该应用程序有一个TableView,其中包含动态高度单元格

一个单元格由一个视图和其中的多行标签组成。

如果标签的字符数超过>250 ,则它会以“... 查看更多”结尾


现在的问题是有时标签会被切断。

Line Break对标签的设置进行了一些尝试,将其更改为Character Wrap后,标签会显示其全文。

左图Character Wrap- - -右图:( Word Wrap我需要这个)

在此处输入图像描述如右图所示,“Bt... See More”被切断了。


我意识到,如果我将标签的宽度视图的宽度设置为固定大小,那么问​​题就会得到解决:所以问题的根源可能在于气泡视图的主要约束:

Align leading to Superview
Constant: 0
Priority: 1000
Multiplier: 0.25

(这是必要的,以便气泡视图最大扩展到超级视图的 75%)

我为此做了一个 GitHub 存储库:

https://github.com/krptia/chatBubbleTest

请帮忙!


任何人?

标签: swifttableviewcell

解决方案


解决方案

我发现如果我将气泡视图的前导常量设置如下:

Align leading to Superview
Constant: 0
Priority: 1000
Multiplier: 0.25

为了将最大宽度设置为 75%,里面的标签不正确地换行。

所以我删除了前导约束,而不是通过纵横比最大化宽度!

如果我使用纵横比 2:3

然后我得到了同样的结果,但是标签包装正确!!

解决方案 2.0

好的,现在我发现气泡视图的前导约束的第二项(SuperView.Trailing)是相对于边距

取消选中后,问题得到解决,所以我不必使用纵横比!耶

但要注意

因为使用Line Break: Word Wrap也会导致一些问题。

有时它会尝试将文本分成新行(最少 2 个单词),但如果重复使用单元格,则应用程序可能会计算错误的视图高度。


第一张图Word Wrap- - - - - - -第二张图Clip

在此处输入图像描述

也许这个问题可以用 layoutIfNeeded() 解决,或者我不知道。剪辑对我来说很好

更新(2019.03.27)

嗯..我意识到问题仍然存在...我不明白为什么。

还在想办法。。


推荐阅读