UITableCell与自动布局配置多行UILabel被截断

时间:2017-07-08 20:13:59

标签: ios uitableview autolayout uilabel

我正试图让一些多线标签在tableview单元格内表现。我已经摆脱了这个问题所描述的根本无法正常工作的筹码

UILabel inside nested UIStackViews inside UITableViewCell sometimes truncating

我在对该问题的评论的帮助下修正了我的一个观点,但是另一种观点对我来说不起作用,即使在转向自动布局非堆栈视图设置之后也是如此。然后,我最终移动了我无法进入视图的单元格,该视图使用了类似的布局,并且在同一视图中我有两个单元格,一个有效,另一个没有出现。 ;吨。我已将其导出到我已上传的新测试应用中here

在这个应用程序中有一个简单的tableview,里面有2个单元格。一个单元格正确显示大型多行文本,并根据需要扩展单元格。另一个单元格停止并缩短多行标签,如您所见

app simulator screenshot

对我而言,这两个细胞在约束条件下几乎完全相同,所以我很困惑为什么一个有效,另一个没有。这是对其约束的概述

constraints for cells

由于我一直试图弄清楚导致其中一个细胞不起作用的原因,因此未安装一些约束。

如果有人能够向我解释是什么原因导致这两个细胞表现不一样,或者更重要的是,为什么其中一个标签不能填充其表格单元格,因为我和#39非常感谢花了几个小时看,似乎无法弄明白。

干杯!

1 个答案:

答案 0 :(得分:2)

修改:

首先解释出了什么问题......

右侧"标签标签"在Cell2中有一个显式Preferred Width = 300。我不知道内部情况,因此无法确切地说出发生了什么,但我得到的印象是,在计算文本边界时,自动布局会考虑Preferred Width值 - 框高度,然后继续使用约束,内容,内在大小等。

只需取消选中显式选项即可解决问题。

原始答案:

我发现从头开始创建新Cell更容易,而不是尝试修改你设置的约束,所以......这将希望可以重现。

准备:添加新的“Cell3”类;对代码进行基本编辑以适应Cell3。如果我为标签值制作一些变量并设置元素的背景颜色以便于视觉检查和测试,我也会发现更容易。

第1步:添加新原型;紫色背景; TableViewCell3类和“Cell3”重用ID;垂直拉伸使其高度足以使用(它不会影响运行时间的高度)。

第2步:为左侧标签添加UIViewLeading = 8到Superview。 Width = 200; Height = 100;垂直居中。高度和宽度值将在以后更改。

第3步:将两个左侧标签 - 12(正文字体)添加到UIView。约束1 Left = 0; Top = 0。约束2 Left = 0; Bottom = 0

步骤4:从2 1添加7.5的垂直间距约束,并将更改 UIView的高度约束>= 20 (运行时可能总是超过20)。

步骤5:更改 UIView的宽度约束为>= 40(运行时可能总是超过40);为左侧标签添加Trailing Space to Container约束,并将其设置为>= 0

第6步:将“上方和下方”添加到“Superview”约束到UIView的{​​{1}}。

步骤7:添加右侧标签(Caption 1字体,行数0)。将>= 0Top >= 0Right = 0全部限制在Superview;也是垂直中心。

步骤8:将水平间距约束右侧标签添加到 UIView,设置为Bottom >= 0。为右侧标签指定宽度约束20(运行时可能总是超过40),并将 优先级 设置为{{1 }}。这允许包含左侧标签的= 40控制宽度。

步骤9:分配IBOutlets并运行应用程序。尝试更改文字。使左侧标签更短或更长...尝试将右侧标签设置为只有一行的足够文本......等等。

在这一点上,事情应该看起来很不错 - 直到......你在左侧标签之一放了太多文字,此时你的右侧非常非常窄,非常高标签。所以......

步骤10:将另一个宽度约束添加到250并将其设置为UIView。根据您的实际内容,您可能希望修改它 - 或者将其设置为UIView到单元格宽度的百分比。

我更新了我原来的GitHub仓库,以便您查看。它应该为每个"步骤"提交一个提交。上面列出的,可能会更容易跟进 - https://github.com/DonMag/CellTest2

结果:

enter image description here