Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView当另一个单元格为空时标签的垂直居中_Ios_Uitableview - Fatal编程技术网

Ios UITableView当另一个单元格为空时标签的垂直居中

Ios UITableView当另一个单元格为空时标签的垂直居中,ios,uitableview,Ios,Uitableview,我有一个UITableViewCell,它包含两个垂直放置的标签,一个在另一个上,我使用的是AutoLayout。 当两个标签都有一些文本时,单元格工作(并且看起来)正常 但是,有时顶部标签不包含任何文本,在这种情况下,我希望单元格具有相同的高度,但底部标签垂直居中。是否可以在运行时使用AutoLayout而不修改约束条件?然后制作两个原型单元。一个是您现在拥有的标签,另一个只包含一个标签,但垂直居中。检查文本是否为空,返回带有垂直居中标签的单元格。否则,返回另一个单元格。然后制作两个原型单元格

我有一个UITableViewCell,它包含两个垂直放置的标签,一个在另一个上,我使用的是AutoLayout。 当两个标签都有一些文本时,单元格工作(并且看起来)正常


但是,有时顶部标签不包含任何文本,在这种情况下,我希望单元格具有相同的高度,但底部标签垂直居中。是否可以在运行时使用AutoLayout而不修改约束条件?然后制作两个原型单元。一个是您现在拥有的标签,另一个只包含一个标签,但垂直居中。检查文本是否为空,返回带有垂直居中标签的单元格。否则,返回另一个单元格。

然后制作两个原型单元格。一个是您现在拥有的标签,另一个只包含一个标签,但垂直居中。检查文本是否为空,返回带有垂直居中标签的单元格。否则,请返回另一个单元格。

我认为如果不在运行时修改某些内容,就无法完成此操作。如果您希望在不以编程方式更改约束的情况下执行此操作,我将看到一些选项,有些选项比其他选项更混乱:

第一个选项,您可以在单元格中设置三个标签。两个标签垂直堆叠,一个垂直覆盖整个单元格,完全重叠其他两个标签。在运行时,您可以确定底部标签是否不应包含文本,然后将重叠的顶部标签设置为先前在顶部垂直堆叠标签上设置的文本

第二个选项,您可以使用一个标签,该标签的高度与您当前拥有的两个标签的高度相同。将此新(2x高)标签设置为允许2行(可在InterfaceBuilder侧选项中完成)。然后在运行时使用两个标签的文本插入label.text属性。如果第二个标签包含文本,则在标签之间添加新行字符。它看起来像这样

迅速:

my2xLabel.text = "\(firstLabelString) \n \(secondLabelString)"
在Obj-C中:

my2xLabel.text = [NSString stringWithFormat:@"%@ \n %@", firstLabelString, secondLabelString];

尽管如此,在运行时修改约束可能是实现这种格式的一种不太老练的方法。

我认为,如果不在运行时修改某些内容,就无法实现这一点。如果您希望在不以编程方式更改约束的情况下执行此操作,我将看到一些选项,有些选项比其他选项更混乱:

第一个选项,您可以在单元格中设置三个标签。两个标签垂直堆叠,一个垂直覆盖整个单元格,完全重叠其他两个标签。在运行时,您可以确定底部标签是否不应包含文本,然后将重叠的顶部标签设置为先前在顶部垂直堆叠标签上设置的文本

第二个选项,您可以使用一个标签,该标签的高度与您当前拥有的两个标签的高度相同。将此新(2x高)标签设置为允许2行(可在InterfaceBuilder侧选项中完成)。然后在运行时使用两个标签的文本插入label.text属性。如果第二个标签包含文本,则在标签之间添加新行字符。它看起来像这样

迅速:

my2xLabel.text = "\(firstLabelString) \n \(secondLabelString)"
在Obj-C中:

my2xLabel.text = [NSString stringWithFormat:@"%@ \n %@", firstLabelString, secondLabelString];

尽管如此,在运行时修改约束可能是实现这种格式的一种不太老练的方法。

这也是我的想法之一,但我更喜欢一种更通用的方法。问题是你不想修改约束。如果您使用的是autolayout,并且希望移动子视图,我知道您必须更改约束。所以我认为这是不可能的。这也是我的想法之一,但我更喜欢一种更一般的方法。问题是你不想修改约束。如果您使用的是autolayout,并且希望移动子视图,我知道您必须更改约束。因此,我认为这是不可能的。尽管这不是最优雅的方法,但我认为第一种方法是有效的想法。即使这不是最优雅的方法,我认为第一种方法是有效的想法