0

在我的应用程序中,我在 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 是相同的,就像之前的情况一样,里面的所有项目都在哪里。实际上,它没有第二次改变。

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

请注意,此视图控制器的自动布局已关闭。

谢谢。

4

1 回答 1

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)];
于 2013-06-29T20:43:18.263 回答