在我的应用程序中,我在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。
感谢。
答案 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)];