gpt4 book ai didi

ios - UILabel sizeThatFits 对于 1 行标签来说太宽了

转载 作者:行者123 更新时间:2023-11-28 21:30:35 25 4
gpt4 key购买 nike

我有一个以编程方式创建和显示的标签。它可以是 1 行或多行。如果标签太长,我希望标签在末尾被截断。当标签的长度 > 1 行时,以下代码可以正常工作。创建一个空白项目并将其放入 viewDidLoad 以在家里一起玩。任何 iOS 或 tvOS 项目都应该这样做。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.numberOfLines = 2;
label.lineBreakMode = NSLineBreakByTruncatingTail;
label.backgroundColor = [UIColor blueColor];
[self.view addSubview:label];

NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:26.0]};

label.attributedText = [[NSAttributedString alloc] initWithString:@"The rain in Spain falls mainly on the plain." attributes:attributes];

CGSize maxLabelSize = CGSizeMake(200, CGFLOAT_MAX);
CGSize requiredSize = [label sizeThatFits:maxLabelSize];
NSLog(@"requiredSize: %@", NSStringFromCGSize(requiredSize));
label.frame = CGRectMake(50.0, 50.0, requiredSize.width, requiredSize.height);

但是,如果我将 numberOfLines 更改为 1,则 sizeThatFits 返回一个宽度足以容纳整个字符串的大小,即使它大于 的宽度>最大标签大小

我可以通过检查 requiredSize.width 是否大于 maxLabelSize.width 并适当调整来解决这个问题,但我想知道为什么 sizeThatFits 对 1 行标签的行为与对多行标签的行为不同。我希望大小不大于 200,高度与属性字符串的行高相同。

最佳答案

我不知道为什么 sizeThatFits 不起作用,但是另一种方法 textRectForBounds:limitedToNumberOfLines:做的伎俩。有点像

label.numberOfLines = 0;
CGSize requiredSize = [label textRectForBounds:CGRectMake(0, 0, 200, CGFLOAT_MAX) limitedToNumberOfLines:1].size;

关于ios - UILabel sizeThatFits 对于 1 行标签来说太宽了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228983/

25 4 0