gpt4 book ai didi

ios - UITextView vs UILabel 高度计算

转载 作者:行者123 更新时间:2023-11-28 19:50:39 26 4
gpt4 key购买 nike

我有一个大文本文件,我想在屏幕上显示。例如:

Line 1
Line 2
Line 3
...
Line 138

我有一个 UIScrollview,并动态添加带有文本的 UILabel 或 UITextView 的 subview 。我可以用这个计算文本的宽度/高度:

[passedTextInFile boundingRectWithSize:CGSizeMake(20000.0f, 20000.0f) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont fontWithName:@"Times New Roman" size:textSize]} context:Nil].size;

然后我创建我的 UILabel 并像这样添加到 subview :

CGRect test = CGRectMake(5.0, 5.0, maxWidthSize, maxHeightSize);
CGSize maxSize = CGSizeMake(maxWidthSize, maxHeightSize);
UILabel *lblResults = [[UILabel alloc] initWithFrame:test];
[lblResults setFrame:test];
[lblResults setText:passedTextInFile];
[lblResults setFont:[UIFont fontWithName:@"Times New Roman" size:textSize]];
[lblResults setTextColor:[UIColor blackColor]];
[lblResults setNumberOfLines:0];

[svResults addSubview:lblResults];
[svResults setShowsHorizontalScrollIndicator:true];
[svResults setScrollEnabled:true];
[svResults setContentSize:maxSize];

上面的代码效果很好。我能够看到第 1 行,然后滚动到底部并看到第 138 行。

但是,当我将 UILabel 更改为 UITextView 时,我只能滚动到第 131 行。

UITextView *lblResults = [[UITextView alloc] initWithFrame:test];
[lblResults setFrame:test];
[lblResults setText:passedTextInFile];
[lblResults setFont:[UIFont fontWithName:@"Times New Roman" size:textSize]];
[lblResults setTextColor:[UIColor blackColor]];
[lblResults setScrollEnabled:false];
[lblResults setEditable:false];

最后好像删掉了一些文字。我仔细检查了 UILabel 和 UITextView 的高度大小是否均为 2139.539062。

现在,当我为 UITextView 启用滚动时,我可以滚动到第 131 行,让滚动停止,然后可以滚动到第 138 行。换句话说,我在 UIScrollView 中滚动到第 131 行,然后到 UITextView 中的第 138 行。我不想要这种行为,这就是我禁用 UITextView 滚动的原因。

我的问题是,与 UILabel 相比,为什么滚动在 UITextView 中提前停止。 UITextView 中是否有我可以更改的设置,使其像 UILabel 一样显示?

提前致谢

更新:

以下是我用来完成这项工作的行:

[[lblResults textContainer] setLineFragmentPadding:0.0];
[lblResults setTextContainerInset:UIEdgeInsetsZero];
[lblResults sizeToFit];

再次感谢大家的快速回复和帮助。

最佳答案

UITextView 有填充,但 UILabel 没有。

您可以在 iOS 7+ 上像这样删除填充:

textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsZero;

参见 this question适用于 iOS 7 之前的解决方案。

关于ios - UITextView vs UILabel 高度计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29460039/

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