AutoLayout滚动UITextView sizeThatFits无法正常工作

时间:2016-02-08 17:48:04

标签: objective-c scroll resize autolayout uitextview

在我的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我只通过滚动看到了大约一半的文字。我避免在滚动视图中嵌套文本视图,正如一个解决方案所暗示的那样,因为在文档中不鼓励这样做。我错过了什么?提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

此问题以及任何Autolayout约束更新都不应在viewDidLoad中进行,而应在viewDidLayoutSubviewsviewWillAppear中进行。最好的安置可能会更好地解释 - 我可以接受评论。