根据视图的内容更改ScrollView高度

时间:2015-04-29 07:15:44

标签: ios objective-c

我解析了一些Json数据并使用各种UITextView显示它,现在我使用了通过Storyboard创建的ScrollView,其高度为1000px但有时候我也无法显示整个数据,因为它也是如此为了适应ScrollView,我如何以编程方式更新它以便根据视图必须显示的内容来设置高度?

2 个答案:

答案 0 :(得分:1)

您可以计算文字的高度:

   CGRect textRect = [@"your text" boundingRectWithSize:CGSizeMake(yourScrollView.width, CGFLOAT_MAX)
                                           options:(NSStringDrawingUsesLineFragmentOrigin)
                                        attributes:@{NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue" size:18]}
                                           context:nil];

然后更新scrollView contentSize

[yourScrollView setContentSize:CGSizeMake(yourScrollView.frame.size.width,textRect.size.height)];

答案 1 :(得分:0)

转到故事板并删除UITextViews的所有高度限制。为了避免故事板中的警告,请选择“内在大小” - >在ScrollView中为每个UITextView放置Holder。该选项位于“大小检查器”(右窗格)中。这将告诉XCode知道您不想指定高度,而是希望它们基于其intrinsicContentSize。

最后,创建一个继承自UITextView的新类'FitContentTextView'。在故事板中,让你想要的所有UITextView足够大,以适应FitContentTextView类型的内容

- (void)setText:(NSString *)text {
    [self setScrollEnabled:YES]; 
    [super setText:text];

    [self invalidateIntrinsicContentSize];
}

- (CGSize)intrinsicContentSize {
    CGSize size = [self contentSize];
    return size;
}

setText中的setScrollEnabled很重要。如果启用了滚动,则contentSize方法仅返回足够的大小以适合所有文本。否则,将返回TextView的边界。

此外,每次设置文本时调用invalidateIntrinsicContentSize都要确保autolayout在绘制TextView之前调用方法intrinsicContentSize,并将此方法添加到其中。

最后,请记住将所有ScrollView的子视图从上到下垂直固定到其超视图。这是AutoLayout可以更新SrollView的contentSize以适合所有子视图的唯一方法。