2014-08-29 74 views
2

我有一个UIScrollView,其中有一些垂直排列的子UITextViews。我想让UIScrollView调整大小以适应内容。所以我TextViews我做如何调整UIScrollView的大小以适应孩子的内容UITextViews

- (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]; 
} 

而且对于滚动型我做

-(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

您可以上传一个示例项目Github的? – Ricky 2014-08-29 01:37:22

+0

没有。我不允许将该项目上传到公共回购站。 – 2014-08-29 01:56:56

+0

只需制作一个新的示例项目,一个带有scrollview的视图控制器,以及textviews +代码来调整您已完成的textview/scrollview的大小。 – Ricky 2014-08-29 01:59:13

回答

1

我不知道你的textViews在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个textviews组合。你的项目可能会有所不同。

+0

谢谢。我已经尝试过了。这两个子视图合计为350.即使在分配给scrollView之后,scrollview的高度也是520(帧高)。但问题似乎是框架与内容大小。内容大小是正确的,当我检查它。但是当我检查框架高度的大小时,它会失败。而做'[self.scrollView sizeToFit]'没有帮助。 – 2014-08-29 02:50:18

+0

“失败”是什么意思?根据我的经验,scrollView的帧大小通常固定在故事板上。当任何子视图需要调整大小时,我只调整scrollview的内容大小。您可能想要从故事板中检查。如果您能够在某处上传示例项目,以便我可以全面了解,那么最好。 – Ricky 2014-08-29 02:56:20

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的子视图。这有可能甩掉上述代码的准确性,但我发现它总是有效,除非在一些非常特殊的情况下。

0

如果您知道每行的滚动视图中有多少个子视图,那么您需要做一些小算术以找到正确的高度。

例如,你可能有一个uiview与uiimageview和uilabel,所以你的子视图计数将是它应该是3倍。

尝试

// CSV = contentscrollview

NSLog(@"%d", [[csv subviews] count]/3); 
相关问题