在我的UIViewController中,我有一个不可编辑的属性UITextView,启用了滚动功能,我想调整滚动文本的高度,以适应所有屏幕尺寸宽度,而不会有额外的空白区域。我正在使用AutoLayout并为textview及其高度约束设置出口。在视图控制器的viewDidLoad方法中,我使用sizeThatFits方法更新textview高度,但结果大小太小。
- (void)viewDidLoad{
[super viewDidLoad];
NSLog(@"INIT HEIGHT: %f, myTextView.frame.size.height);
CGSize sizeToFit =
[myTextView sizeThatFits: CGSizeMake(myTextView.frame.size.width, MAXFLOAT)];
myTextViewHeightConstraint.constant = sizeToFit.height;
[myTextView updateConstraints];
[myTextView layoutIfNeeded];
NSLog(@"NEW HEIGHT: %f", myTextView.frame.size.height);
}
日志表明高度确实从我的默认值4000变为2502,但是2502我只通过滚动看到了大约一半的文字。我避免在滚动视图中嵌套文本视图,正如一个解决方案所暗示的那样,因为在文档中不鼓励这样做。我错过了什么?提前谢谢。
答案 0 :(得分:0)
我发现UITextView
的框架会自动调整其内容的大小,因此无需动态设置它。 sizeThatFits
是一种UIView
方法,不会修改文本内容的大小,而是修改文本显示的窗口大小。我需要的唯一代码是滚动文本到顶部:
[myTextView scrollRectToVisible: CGRectMake(0,0,1,1) animated:NO];
此问题以及任何Autolayout约束更新都不应在viewDidLoad
中进行,而应在viewDidLayoutSubviews
或viewWillAppear
中进行。最好的安置可能会更好地解释 - 我可以接受评论。