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];
我目前有这些 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];