2013-06-29 61 views
0

在我的應用程序中,我在UIScrollView中有一些信息。 UIScrollView中的內容可以通過過濾器進行更改。在UIScrollView中setContentSize只能工作一個

第一次,當ViewController加載時,我把所有的項目放在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]; 
    } 
} 

滾動型佔滿了由新的項目,但該contentSize是一樣的,就像以前的情況,裏面的所有物品都在哪裏。其實,第二次沒有改變。

這對用戶來說不舒服,有人可以給我建議,我應該在哪裏看?

請注意,此View Controller的Autolayout已關閉。

謝謝。

回答

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)]; 
+0

我的代碼是正確的。 contentSize不應小於scrollView框架。 – Andrey

+0

等等,你是否試圖調整scrollview的實際框架,或者你是否嘗試調整contentSize,以便可以滾動瀏覽汽車? – JustAnotherCoder

+0

我只更改contentSize – Andrey