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 は、すべてのアイテムが内部にあった以前の状況と同じです。実際には、2 回目は変更されません。

ユーザーにとって快適な動作ではありません。どこを見ればよいか、誰かアドバイスしてもらえますか?

このView ControllerではAutolayoutがオフになっていることに注意してください。

ありがとう。

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 に答える