Objective-C VisualFormatString - 标签和 TextField 并排,宽度优先于 TextField

Objective-C VisualFormatString - Label and TextField side by side with width priority to TextField

我目前有这些 tableView 单元格:

每个单元格都是同一类型。每个在左侧都有一个 UILabel,在右侧有一个 UITextField。有时数据可能会在加载时传递到文本字段中,而其他时候用户将手动将数据输入到这些字段中。

一切都以编程方式完成。没有故事板。我正在使用视觉格式字符串来设置单元格的样式。

这是我的问题:
我希望标签宽度随着给定内容和文本字段宽度的增加而增长,以填充单元格中可用的剩余 space。

这是我的代码:

NSDictionary* views = @{ @"bsyLeftLabel": self.bsyLeftLabel, @"bsyRightGenericTextField": self.bsyRightGenericTextField };

    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-18-[bsyLeftLabel]-[bsyRightGenericTextField]-18-|"]
                                                                             options:0
                                                                             metrics:nil
                                                                               views:views]];

如您所见,我在单元格的左右两端有一个 18 磅的填充,标签和文本字段之间的默认间距。

如何使标签的宽度与其中的文本一样大,并使文本字段填充单元格的剩余宽度?

提前感谢您的帮助。

该代码给您带来了什么结果?当我在故事板中进行同样的设置时,我得到了你想要的结果。如果你没有得到那个结果,你可能需要将标签的内容拥抱优先级设置为比文本字段更高的值(在情节提要中,你会自动获得,我不知道这是否发生在代码)。

如果你总是希望标签能够完整显示它的文本,你还需要将其内容压缩阻力提高到比文本字段更高的级别(默认为 750)。

[self.label setContentCompressionResistancePriority: 751 forAxis:UILayoutConstraintAxisHorizontal];

您是否尝试在 UILabel 上添加宽度 >= 0 的约束:@"bsyLeftLabel(>=0)" 以使其适应其内容?

bsyLeftLabel 的 Content Hugging 设置为高于 bsyRightGenericTextField 的 Content Hugging,这样标签将 "hugged" 围绕其内容,然后文本字段将自动扩展到space 的其余部分:

[self.bsyLeftLabel setContentHuggingPriority:NSLayoutPriorityRequired 
                         forOrientation:NSLayoutConstraintOrientationHorizontal];