Scrollview setcontentsize用于动态内容

时间:2011-07-17 14:13:48

标签: iphone objective-c uiscrollview

当内容大小为动态时,如何设置scrollview的内容大小。我已将所有内容添加到名为“contentView”的UIView,然后尝试调用setcontentsize,如下所示,但这不会导致滚动。

sudo'ish代码:

[scrollView setContentSize: contentView.frame.size];

也许“contentView”没有扩大尺寸以适合其孩子?

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:4)

UIViewUIScrollView不会根据内容自动延长。您必须手动计算帧并在scrollview中相应地对其进行定位,然后将scrollview的contentSize设置为可以容纳其所有子视图的最大可能大小。

答案 1 :(得分:1)

当您向contentView调用[contentView sizeToFit]添加内容然后内容视图将展开以适合其子视图时,您发布的代码将起作用。

答案 2 :(得分:1)

这取决于您要动态添加的内容类型。因此,假设您要显示大文本数据,然后使用UITextView,因为它是UIScrollView的子类,您可以在分配文本内容时获取TextView的setContentSize。在此基础上,您可以设置UIScrollView的总大小。

float yPoint = 0.0f;
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 320.0f, 400.0f)];

UITextView *calculatorTextView = [[UITextView alloc] init];
  calculatorTextView.text = @"My looong content text ..... this has a dynamic content";
[calculatorTextView sizeToFit];

yPoint = yPoint + calculatorTextView.contentSize.height; // Bingo, we have the new yPoiny now to start the next component. 

//现在您知道文本的高度以及文本的结束位置。因此,您可以创建Label或其他TextView并在那里显示您的文本。您可以将这些组件作为子视图添加到滚动视图中。

UITextView *myDisplayContent = [[UITextView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 300.f, calculatorTextView.contentSize.height)];

myDisplayContent.text = @"My lengthy text ....";
[myScrollView addSubview:myDisplayContent];

//最后,将'myScrollView'的内容大小设置为显示区域的总长度。

[myScrollView setContentSize:yPoint + heightOfLastComponent];

这适合我。