我有一个UITableViewCell,其中包含两个垂直放置的标签,我正在使用AutoLayout。 当两个标签都有一些文字时,单元格工作(并且看起来很好)。
有时候,顶部标签不包含任何文字,在这种情况下,我会让单元格具有相同的高度,但是底部标签要垂直居中。是否可以使用AutoLayout执行此操作而不在运行时修改约束?
答案 0 :(得分:1)
然后制作两个原型单元格。一个是你现在拥有的,另一个只包含一个标签,但是垂直居中。检查文本是否为空,返回带有垂直居中标签的单元格。否则,返回另一个单元格。
答案 1 :(得分:1)
我不相信这可以在不运行时修改某些内容的情况下完成。如果您想在不以编程方式更改约束的情况下执行此操作,我会看到一些选项,其中一些比其他更麻烦:
第一个选项,您可以在单元格中设置三个标签。两个垂直堆叠的标签和一个垂直覆盖整个单元格的标签,与其他标签完全重叠。在运行时,您可以确定底部标签是否不应包含文本,然后将重叠的顶部标签设置为您之前在顶部垂直堆叠标签上设置的文本。
第二个选项,您可以使用具有您当前拥有的两个标签高度的标签。设置这个新的(2x高度)标签以允许2行(可以在InterfaceBuilder侧选项中完成)。然后在运行时使用标签文本插入label.text属性。如果第二个标签有文本,请在标签之间添加换行符。它看起来像这样
在斯威夫特:
my2xLabel.text = "\(firstLabelString) \n \(secondLabelString)"
在Obj-C中:
my2xLabel.text = [NSString stringWithFormat:@"%@ \n %@", firstLabelString, secondLabelString];
所有这些都说,在运行时修改约束可能是一种不太常见的方式来实现这种格式化。