gpt4 book ai didi

ios - 流畅的垂直布局、动态标签和自动布局

转载 作者:行者123 更新时间:2023-11-29 10:42:47 24 4
gpt4 key购买 nike

我正在尝试在 ios7 中使用自动布局复制流畅的垂直布局。问题是我正在使用一堆 UILabels (和其他元素)和 AttributedStrings (但这似乎不会干扰这个问题,因为它也带有纯文本) 并且标签中的文本是动态添加的,但是框架或更好的约束似乎没有以正确的方式自动适应(未指定标签的高度),因为标签保留了 xib 中给定的尺寸.

Initial configuration in the Xib, blue are setted equality constraints

Initial configuration in the Xib, blue are setted equality constraints

如果我使用较低的压缩和拥抱优先级值来设置较大的高度约束常量,则相同。没有任何变化。

After adding text and resizing constraint value (the text should have 5 rows)

After adding text and resizing constraint value (the text should have 5 rows

每次以这种方式或使用 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 行 的文本,仅显示第一行,而最后一行被剪掉,尽管框架似乎完全符合所需的尺寸。

the red space remains in any case

将高度乘以 2(或另一个常数)似乎可以解决问题,但显然现在文本比框架要小,而且顶部和底部留有很多空白。。 p>

尝试使用 [label fitToSize] 似乎效果很好,但显然约束会在之后立即恢复框架。

使用动态 UI 标签和自动布局实现垂直流畅布局的最佳做法是什么?

最佳答案

创建“流体垂直布局”的最佳方式...UITableView

说真的,这看起来是使用 UITableView 的完美选择。

它不仅仅用于显示数据列表。例如,在 iOS 的 Contacts 应用程序中,个人联系人(您可以在其中添加号码和电子邮件等...)使用 UITableView 来布局界面。

它消除了必须计算标签的高度和位置等的所有麻烦......

使用您的 UILabels 之一的正确布局定义自定义 UITableViewCell,然后您只需将正确的文本放入正确的行即可。

UITableView 是一个非常强大的工具,可以处理此类事情。

关于ios - 流畅的垂直布局、动态标签和自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23674082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com