AutoLayout 滚动 UITextView sizeThatFits 不工作

AutoLayout Scrolling UITextView sizeThatFits not working

在我的 UIViewController 中,我有一个启用了滚动的不可编辑的属性 UITextView,我想调整滚动文本的高度以适应所有屏幕尺寸的宽度,而无需额外的白色 space。我正在使用 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,我通过滚动只能看到大约一半的文本。正如一个解决方案所建议的那样,我避免将文本视图嵌套在滚动视图中,因为这在文档中是不鼓励的。我错过了什么?提前致谢。

我发现 UITextView 的框架会自动根据其内容调整大小,因此无需动态设置。 sizeThatFits 是一种 UIView 方法,不会修改文本内容的大小,而是修改文本出现的 window 的大小。我唯一需要的代码是滚动文本到顶部:

    [myTextView scrollRectToVisible: CGRectMake(0,0,1,1) animated:NO];

这以及任何自动布局约束更新不应在 viewDidLoad 中进行,而应在 viewDidLayoutSubviewsviewWillAppear 中进行。最佳位置可能会得到更好的解释 - 我愿意接受评论。