UIScrollview动态内容大小非常基于项目数量

时间:2013-09-11 21:25:26

标签: ios ios6 uiscrollview scrollview

我有一个带缩略图的垂直滚动视图,可作为ipad应用上特定项目的“侧面板”。

以下是我设置内容大小的代码:

- (void)setScrollViewContentSize:(UIScrollView*)scrollView{
    NSInteger viewCount = [scrollView.subviews count];

    NSLog(@"viewCount: %d", viewCount);
    NSLog(@"height: %f", (viewCount * 190.0f));
    scrollView.contentSize = CGSizeMake( scrollView.superview.frame.size.width, (viewCount * 190.0f));
    }

当我运行我的应用程序时,有一个菜单有57个项目,因此viewCount日志显示为57,高度显示为10830.在另一个菜单上,我有13个项目,因此,高度为2470。 / p>

这里的一切似乎都很好,但是当我滚动到视图的末尾时,带有57个图标的菜单会留下太多的空白区域,而带有13个项目的菜单会在最后一个项目上完美地结束并且有一点边距(每个缩略图是183px)。我试图找出原因是什么,但似乎我拥有的菜单项越多,滚动视图在最后一项上的间距就越大。

我尝试调用scrollView sizeToFit,甚至尝试创建一个可见区域的CGRect到我的框架的apple,但没有一个工作。有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:8)

来自https://stackoverflow.com/a/14852596/1363779

float sizeOfContent = 0;
UIView *lLast = [scrollView.subviews lastObject];
NSInteger wd = lLast.frame.origin.y;
NSInteger ht = lLast.frame.size.height;

sizeOfContent = wd+ht;

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent);

这是一种很好的简单方法。

答案 1 :(得分:1)

Swift 2.0版

    var sizeOfContent: CGFloat = 0
    let lLast: UIView = scrollView.subviews.last!
    let wd: CGFloat = lLast.frame.origin.y
    let ht: CGFloat = lLast.frame.size.height
    sizeOfContent = wd + ht
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent)