我正在尝试以编程方式创建一个包含两个UILabel子视图的容器视图,其行为如下:
我已使用numberOfLines = 0
和lineBreakMode = NSLineBreakByWordWrapping
定义标签。
请注意,容器的大小是完全动态的;它的宽度由其超视图决定,而其高度由其子视图(标签)决定。标签的大小也是动态的;它们的宽度与容器宽度成正比,它们的高度取决于文本的长度。
我已经能够实现上述所有内容,除了最后一项,具有以下约束(伪代码)。 A是左侧标签,B是右侧。
最后2个约束旨在拉伸容器以适应标签的高度,但布局引擎似乎忽略了标签可能是多行的事实。也就是说,无论文本的长度如何,我总是会显示一行。
那么我需要添加/修改/删除哪些约束才能实现上述全部行为?
答案 0 :(得分:7)
要使标签自动调整高度,您需要执行以下操作:
例如:
self.descriptionLabel = [[[UILabel alloc] init] autorelease];
self.descriptionLabel.numberOfLines = 0;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.descriptionLabel.preferredMaxLayoutWidth = 200;
[self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self addSubview:self.descriptionLabel];
NSArray* constrs = [NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[descriptionLabel_]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)];
[self addConstraints:constrs];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[descriptionLabel_]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
[self.descriptionLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[descriptionLabel_(220@300)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
答案 1 :(得分:0)
将标签的高度约束优先级设置为低值,并尝试在代码中设置约束。
答案 2 :(得分:0)
确保设置
required
。