在UIScrollView中,setContentSize只能工作一个

时间:2013-06-29 19:47:26

标签: ios uiscrollview

在我的应用程序中,我在UIScrollView中有一些信息。 可以通过过滤器更改UIScrollView中的内容。

第一次,当ViewController加载时,我将所有项目都放在ScrollView中,一切正常。 如果用户想要将一些过滤器应用于ScrollView,我会删除所有旧项目,创建新项目并设置新的setContentSize:

- (void) displayCars:(NSMutableArray*)cars {
    NSArray *viewsToRemove = [scrollView subviews];
    for (UIView *v in viewsToRemove) [v removeFromSuperview];

    int itemHeight = 100;
    CGFloat scrollViewHeight = cars.count * itemHeight;
    if (scrollViewHeight < scrollView.frame.size.height) scrollViewHeight = scrollView.frame.size.height;
    [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, scrollViewHeight)];

    for (int i=0; i < cars.count; i++) {
        VitoCarsAdv * adv = [cars objectAtIndex:i];

        VIOneCar *carView = [[VIOneCar alloc] init];
        [carView setFrame:CGRectMake (0, (i * itemHeight), scrollView.frame.size.width, itemHeight)];
        [carView setData:adv];

        [scrollView addSubview:carView];
    }
}

ScrollView正在填充新项目,但contentSize是相同的,就像之前的情况一样,里面的所有项目都是如此。实际上,第二次没有改变。

这对用户来说是不舒服的行为,有人可以建议我,我应该在哪里看看吗?

请注意,此视图控制器已关闭Autolayout。

感谢。

1 个答案:

答案 0 :(得分:0)

你做对了我认为你只是错误输入了一些代码。这是你写的:

int itemHeight = 100;
CGFloat scrollViewHeight = cars.count * itemHeight;
if (scrollViewHeight < scrollView.frame.size.height) {
     scrollViewHeight = scrollView.frame.size.height;
}

使用该代码,scrollViewHeight永远不会缩小到更小的尺寸。您正在设置scrollView.frame.size.height当前的最小大小。这是你的预期功能吗?如果没有,你应该删除if语句,并留下:

CGFloat scrollViewHeight = cars.count * itemHeight;
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, scrollViewHeight)];