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