我有一个大文本文件,我试图在屏幕上显示。例如:
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的Height Size是2139.539062。
现在,当我为UITextView启用滚动时,我可以滚动到第131行,让滚动停止,然后可以滚动到第138行。换句话说,我在UIScrollView中滚动到第131行,然后到UITextView中的第138行。我不想要这种行为,这就是我为UITextView禁用滚动的原因。
我的问题是为什么与UILabel相比,滚动在UITextView中提前停止。在UITextView中是否有设置我可以更改以使其像UILabel一样显示?
提前致谢
更新:
以下是我用来完成这项工作的路线:
[[lblResults textContainer] setLineFragmentPadding:0.0];
[lblResults setTextContainerInset:UIEdgeInsetsZero];
[lblResults sizeToFit];
再次感谢大家的快速回复和帮助。
答案 0 :(得分:2)
UITextView
有填充,但UILabel
没有填充。
您可以在iOS 7 +上删除这样的填充:
textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsZero;
有关iOS 7之前的解决方案,请参阅this question。
答案 1 :(得分:1)
UIlabel是一个视图UITextView也是一个视图,方法boundingRectWithSize与视图框架不同,只是包含该文本的边界矩形。正如Aaron所建议的,UITextView包含填充,而UILabel则不包含。要在设置其字符串后知道文本容器上的确切帧调用-sizeToFit
,然后询问其帧。
答案 2 :(得分:0)
您可以尝试将lblResults.textContainer.maximumNumberOfLines
设置为大号。 (iOS 7)