UITextView使用自动布局动态扩展到滚动视图内的文本

我有一个UIScrollView包含一些组件,其中一个组件是UITextView ,我想要的是让UITextView动态扩展UIScrollView ,实际上我使用autoLayout ,所以这段代码不起作用:

  CGRect frame = self.detailTextView.frame; frame.size.height = self.detailTextView.contentSize.height; self.detailTextView.frame = frame; scroll.contentSize = CGSizeMake(scroll.contentSize.width, 300 + self.detailTextView.frame.size.height); [self.detailTextView setFrame:frame]; 

我想要的是帮助我用故事板元素来做这件事。

在此处输入图像描述

不是设置框架,而是将文本视图的一个高度约束拖动到控制器中以创建出口。 然后在viewWillLayoutSubviews中获取contentSize并设置文本视图高度约束的常量。 这应该完成你在上面的代码中使用框架所做的事情。 只需确保您的文本视图具有从所有边到滚动视图的约束,以便滚动视图可以正确调整其大小。

在我的例子中,我所做的是将scrollview保持为超级视图,并为子视图添加了所有约束,并且uitextview具有从所有边到scrollview的约束。 然后在-viewDidLayoutSubviews方法中更新内容大小。 这是代码片段:

 -(void)viewDidLayoutSubviews{ NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:12.0]}; CGRect rect = [_detailText.text boundingRectWithSize:CGSizeMake(_detailText.frame.size.width - 10.0, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil]; CGRect frame = _detailText.frame; frame.size.height = ceil(rect.size.height) + _detailText.textContainerInset.top + _detailText.textContainerInset.bottom; _detailText.frame = frame; _detailText.contentSize = CGSizeMake(_detailText.frame.size.width, _detailText.frame.size.height); [_contentScrollView setContentSize:CGSizeMake(_contentScrollView.frame.size.width, _detailText.frame.origin.y + _detailText.frame.size.height)]; }