我有一个UIScrollView,其中包含许多垂直排列的子UITextViews。我希望UIScrollView调整大小以适应内容。所以我的TextViews
- (void)textViewDidChange:(UITextView *)textView
{
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
[textView setNeedsLayout];
}
对于我做的scrollview
-(void)resizeScrollViewToFitContent
{
CGRect contentRect = CGRectZero;
for (UIView *view in self.scrollView.subviews) {
contentRect = CGRectUnion(contentRect, view.frame);
}
self.scrollView.contentSize = contentRect.size;
}
我在[self resizeScrollViewToFitContent]
内拨打viewDidAppear
。有什么想法为什么这个设置不起作用?
答案 0 :(得分:1)
我不确定你的textViews在scrollView中的排列方式。我假设它们垂直排列在彼此旁边。我创建了一个带有scrollView和3个textViews的示例项目,它可以很好地处理以下代码: -
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
CGFloat height = self.textView1.frame.size.height +self.textView2.frame.size.height +self.textView3.frame.size.height ;
CGSize size = CGSizeMake(self.scrollView.frame.size.width, height);
self.scrollView.contentSize = size;
}
从我自己的项目中,滚动视图的内容高度是所有3个文本视图的高度组合。它可能与您的项目不同。
答案 1 :(得分:0)
您不应该使用contentFrame和view.frame的联合。请尝试以下方法:
-(void)resizeScrollViewToFitContent
{
UIScrollView* scrollView;
CGSize contentSize = CGSizeZero;
for (UIView* subview in scrollView.subviews)
{
CGFloat subviewRight = CGRectGetMaxX(subview.frame);
if (subviewRight > contentSize.width)
{
contentSize.width = subviewRight;
}
CGFloat subviewBottom = CGRectGetMaxY(subview.frame);
if (subviewBottom > contentSize.height)
{
contentSize.height = subviewBottom;
}
}
scrollView.contentSize = contentSize;
}
值得注意的一件小事:UIScrollView的滚动指示器是任何UIScrollView的子视图。这有可能摒弃上述代码的准确性,但我发现它总能起作用,除非在某些非常特殊的情况下。
答案 2 :(得分:0)
如果您知道每行滚动浏览中有多少个子视图,那么您需要做一些数学运算才能找到正确的高度。
例如,您可能有uiviewview和uilabel的uiview,因此您的子视图计数将是它应该的3倍。
试
// csv = contentscrollview
NSLog(@"%d", [[csv subviews] count] / 3);