1

我有一个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];

我想要的是用故事板元素帮助我做到这一点。

在此处输入图像描述

4

2 回答 2

3

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

于 2013-06-11T16:16:37.407 回答
3

就我而言,我所做的是将滚动视图保留为超级视图,并为子视图添加了所有约束,并且 uitextview 具有从所有边缘到滚动视图的约束。然后更新 -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)];
}
于 2014-01-16T00:52:15.690 回答