0

これには少し説明が必要かもしれません。すぐ下にラベルとテーブルビューを含む UIViewController サブクラスがあります (ラベルとその他のコントロールが UITableViewController サブクラスを使用できない理由です)。テーブルビューの内容は動的であるため、追加時に高さを直接設定することはできません。そのため、loadView で次のことを行っています。

//add the table view with no size for now
    tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) style:UITableViewStyleGrouped];
    tableView.dataSource = self;
    tableView.delegate = self;
    tableView.scrollEnabled = NO;

//now that the datasource is set, use the delegates to update the height
    [tableView layoutIfNeeded];
    [tableView setFrame:CGRectMake(0, self.y_position, 320, [tableView contentSize].height)];

//add it to my scrollview, which contains all controls in this view
    [scrollView addSubview:tableView];

これは今のところうまく機能しています (ただし、別のアイデアを聞くとよいでしょう)。

ビューの編集モードに入ると問題が発生します。追加のセクションと行を挿入して、テーブル ビューの内容を変更したいと考えています。これまでのところ、setEditing の次の実装があります。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated{   
    [tableView beginUpdates];
    [super setEditing:editing animated:animated];

    //insert or remove the section and row 
    NSRange range = NSMakeRange(0, 1);
    if (self.isEditing) {
        [tableView insertSections:[NSIndexSet indexSetWithIndexesInRange:range] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    else {
        [tableView deleteSections:[NSIndexSet indexSetWithIndexesInRange:range] withRowAnimation:UITableViewRowAnimationAutomatic];
    }

    [nameAndIngredientsTableView endUpdates];

}

追加のセクションと行は問題なく追加されていますが、サイズが更新されていないため、テーブル ビューの一番下の行が切り取られています。どうすればいいですか?

同じコードをもう一度使用しようとしました-layoutIfNeededを使用してから、高さを手動で設定しましたが、これは何もしないようです

編集に出入りするときにテーブルビューのサイズを動的に変更するために何を見なければならないかを知りたいです。

4

2 に答える 2

0

より良い解決策がある場合に備えて、私は開いたままにしますが、新しい高さを手動で計算し、手動でアニメーション化することによってのみ、これを機能させることができました:

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    [nameAndIngredientsTableView setFrame:CGRectMake(0, tableView.frame.origin.y, 320, tableView.frame.size.height + delta)];
    [UIView commitAnimations];

ここで、delta は挿入の場合は +x、削除の場合は -x です。x は現在試行錯誤によって決定されていますが、これは理想的ではありませんが、tableView.rowHeight、.sectionHeaderHeight、および .sectionFooterHeight から導出する作業を行っています。

于 2012-04-23T03:53:35.377 に答える
-1

スクロールせずにすべての行を表示しようとしていると思います。(アプリがスクロールに問題がない場合、最後の行の切り取りは問題ではありませんか?)

これを管理するためのより良い方法は、行の高さで遊ぶことです。フレームの高さを固定します。次に、rowHeightをframeHeight/NumberOfRowsとして計算します。

お役に立てれば

于 2012-04-23T00:39:18.807 に答える