ios - UITextView vs UILabel 高度计算

标签 ios uiscrollview uilabel uitextview

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

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/

相关文章:

ios - 使用 AVCaptureSession 录制视频

ios - 在某些情况下禁用 ScrollView 右侧

swift - 结果页面上出现空白屏幕 : where did it go?

ios - 如何在 Collection View 中给 UILabel 一个闪烁的效果

ios - 用点填充文本行中的剩余空白(多行文本)iOS

ios - reloadRowsAtIndexPaths 更新 TableView 的contentOffset

objective-c - iOS 设备中的 SIGSEGV 崩溃,我无法从中找出原因

ios - 具有自动布局模糊高度的 UIScrollView

ios - UITableView 以编程方式在 UIScrollView 内部不调用委托(delegate)方法

ios - 将数据从 Apple Watch 发送到 iPhone