计算scrollview的内容大小

neh*_*eha 7 iphone uiscrollview

我有一个scrollview作为tableview单元格的详细视图.我正在通过界面构建​​器创建标签,按钮等详细视图上有多个视图.我通过界面构建​​器创建的是静态的.我把所有东西放在高度480的视图上.

我的详细视图上的标签是动态文本,可以扩展到任何长度.问题是我需要设置我需要其高度的scrollview的内容大小.

如果内容是动态的,我该如何设置scrollview的高度?

小智 20

您可以尝试使用scrollview'ers ContentSize.它对我有用,我使用动态内容的控件也有同样的问题.

    // Calculate scroll view size
float sizeOfContent = 0;
int i;
for (i = 0; i < [myScrollView.subviews count]; i++) {
    UIView *view =[myScrollView.subviews objectAtIndex:i];
    sizeOfContent += view.frame.size.height;
}

// Set content size for scroll view
myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width, sizeOfContent);
Run Code Online (Sandbox Code Playgroud)

我在控制器中的viewWillAppear方法中为保存scrollview的视图执行此操作.这是我在super上调用viewDidLoad之前做的最后一件事.

希望它能解决你的问题.

//汉纳斯


Hen*_*son 8

纠正较短的例子:

float hgt=0; for (UIView *view in scrollView1.subviews) hgt+=view.frame.size.height;

[scrollView1 setContentSize:CGSizeMake(scrollView1.frame.size.width,hgt)];
Run Code Online (Sandbox Code Playgroud)

请注意,这只是高度的总和,例如,如果两个子视图并排高度并且两者都被添加,使得总和大于它应该是的.此外,如果子视图之间存在垂直间隙,则总和将小于应有的值.错误的高度混淆scrollRectToVisible,给出随机滚动位置:)

这个循环正在运行和测试:

float thisy,maxy=0;for (UIView *view in scrollView1.subviews) {
    thisy=view.frame.origin.y+view.frame.size.height; maxy=(thisy>maxy) ? thisy : maxy;
}
Run Code Online (Sandbox Code Playgroud)