0

上部に UIButton があり、そのすぐ下に UITableView がある UIViewController があります。上部のボタンは、ユーザーがオンまたはオフにできる機能として設定している「履歴」です。ボタンとテーブルを備えたXIBを使用してView Controllerをセットアップしました。

「履歴」機能が無効になっている場合、履歴ボタンを非表示にし、それに応じて UITableView の上部を上に移動して、ビューの上部に空白がないようにします。

viewDidAppear: で hideHistory: メソッドを呼び出すと、履歴ボタンが非表示になり、テーブルがビューの一番上に移動します。

しかし、(テーブルに行を追加するために) モーダル ビューを開いてからモーダル ビューを閉じると、テーブルは元の位置に戻りました。viewWillAppear: への呼び出しを追加しても効果はありません。

以下は hideHistory のコードです。テーブルが元の位置にリセットされる理由について何か考えはありますか?

前もって感謝します!

- (void)hideHistory
{
    [historyButton setHidden:YES] ;

    // move our data table up accordingly
    CGFloat newTop = historyButton.frame.origin.y ;

    CGRect newFrame = CGRectMake(dataTable.frame.origin.x,
                                 newTop,
                                 dataTable.frame.size.width,
                                 dataTable.frame.size.height);
    [dataTable setFrame:newFrame] ;

    [[self view] setNeedsLayout] ;
    [dataTable setNeedsLayout] ;
}
4

1 に答える 1

0

自動レイアウトをオフにして呼び出しを viewWillAppear: に配置するのが正解です。自動レイアウトがオフになっている場合、UITableView は適切に上に移動し、そこにとどまります。また、[[self view] setNeedsLayout] と [dataTable setNeedsLayout] の呼び出しも必要ありません。

于 2013-04-29T04:26:45.570 に答える