【发布时间】:2014-07-03 15:43:46
【问题描述】:
我正在尝试在 ios7 中使用自动布局复制流畅的垂直布局。
问题是我正在使用一堆UILabels(和其他元素)和AttributedStrings(但这似乎不会干扰问题,因为它也带有纯文本)并且标签中的文本是动态添加的,但框架或更好的约束似乎不会以正确的方式自动适应(未指定标签的高度),因为标签仍然是 xib 中给出的尺寸。
Xib中的初始配置,蓝色为设置等式约束
如果我使用设置一个较大的高度约束常数,其值低于压缩和拥抱优先级,则相同。没有任何变化。
添加文本和调整约束值后(文本应该有 5行
我终于尝试在每次文本以这种方式或使用 CoreText 或许多其他方法更改时重新创建约束
[self.view setAutoresizesSubviews:NO];
label.lineBreakMode = NSLineBreakByWordWrapping;
label.numberOfLines = 0;
label.preferredMaxLayoutWidth = label.frame.size.width;
[label removeConstraint:oldConstraint];
NSInteger height = ceil([label.attributedText
boundingRectWithSize:CGSizeMake(label.frame.size.width, 10000)
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
//TODO 20 or 1.5 is an hardoced value. find solution to workaround
//attributes:@{NSFontAttributeName:[UIFont fontWithName:kFontCrimsonText_Roman size:17]}
context:nil].size.height) + 1;
NSLayoutConstraint * newConstraint = [NSLayoutConstraint constraintWithItem:label
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:height];
[label addConstraint:newConstraint];
这一次标签的尺寸看起来是正确的,但里面的文字显示不正确:
假设我有一个 5 行的文本,仅显示第一行,最后一个被剪掉,尽管框架似乎完全符合所需的尺寸。
将高度乘以 2(或其他常数)似乎可以解决问题,但显然现在文本比框架更小,顶部和底部仍有大量空白。。 p>
尝试使用[label fitToSize] 似乎效果很好,但显然约束会在之后立即恢复框架。
使用动态 UIlabels 和自动布局实现垂直流畅布局的最佳做法是什么?
【问题讨论】:
-
忘了说我不能使用 A TableView
标签: ios text autolayout