【发布时间】:2015-04-05 17:22:20
【问题描述】:
我想在屏幕上显示一个大文本文件。例如:
Line 1
Line 2
Line 3
...
Line 138
我有一个 UIScrollview,并动态添加带有文本的 UILabel 或 UITextView 的子视图。我可以用这个来计算文本的宽度/高度:
[passedTextInFile boundingRectWithSize:CGSizeMake(20000.0f, 20000.0f) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont fontWithName:@"Times New Roman" size:textSize]} context:Nil].size;
然后我创建我的 UILabel 并像这样添加到子视图中:
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];
再次感谢大家的快速回复和帮助。
【问题讨论】:
标签: ios uiscrollview uilabel uitextview