1

UITableView を持つストーリーボードがあります。tableView は次のような tableViewHeader を取得します。

----------------------
| Button             |
| Label              |
----------------------

ボタンは、条件が満たされた場合にのみ表示されます。また、ボタンがクリックされた場合、ヘッダーは次のようになっている必要があります。

----------------------
| Label              |
----------------------

私は多くのことを試しました:

[UIView animateWithDuration:0.3 delay:0 options: UIViewAnimationCurveEaseOut
                     animations:^{
                         self.tableView.contentOffset = CGPointMake(0, 59);
                     }
                     completion:^(BOOL finished) {
                         if (finished) {
                             self.tableView.contentOffset = CGPointMake(0, 59);
                             self.viewButton.hidden = YES;
                         }
                     }
     ];

ボタンをクリックすると、これはうまく機能します。しかし、テーブル ビューを上にスクロールすると、0 でバウンスし、オフセットが失われます。テーブル ビューは次のようになります。

----------------------
|                    |
| Label              |
----------------------

また、あらゆる種類のビュー操作を試し、次のように tableViewHeader をリセットしようとしました。

    CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = 31; 
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
[self.tableView.tableHeaderView addSubview:self.viewTitle];

結果の取得:

----------------------
|                    |
|            Label   |
----------------------

UITableViewController を UIViewController に変更する方法を見たことがありますが、問題はビュー コントローラー フレームを操作することで解決されますが、10 個のテーブル ビューがあり、必要なすべての変更を行う時間がありません。

誰か助けてくれませんか?

4

3 に答える 3

5

同じオブジェクトをテーブル ビュー ヘッダーに再割り当てすることで、同様の問題を解決しました。

self.tableView.tableHeaderView = self.tableView.tableHeaderView;

この割り当ての前に、テーブル ヘッダー ビューのサイズを変更する必要があることに注意してください。

于 2012-11-01T21:06:56.877 に答える
0

単なるコピー/貼り付けの問題かどうかはわかりませんが、ヘッダーフレームを変更すると、ステップが欠落していると思います。これで試してください:

CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = 31; 
self.tableView.tableHeaderView.frame = frame;

最後の割り当てを省略した場合は、ローカルCGRectを作成してその値を変更しただけであり、実際にはヘッダーのフレームを変更していません。

于 2012-11-01T17:52:25.267 に答える
0

UITableView を内部に持つ UIViewController を使用することにしました。ここでの私のアドバイスは、UITableViewController のことは忘れてください。それはめちゃくちゃです。解決策は次のとおりです。

ボタン:

- (IBAction)synchronizeTouchUpInside:(id)sender {

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    self.view.frame = CGRectMake(0, -59, 320, 367 + 59);
    [UIView commitAnimations];

}

ビューが表示されます:

- (void)viewWillAppear:(BOOL)animated {

    if (1 == 1) {
        self.view.frame = CGRectMake(0, -59, 320, 367 + 59);
    } else {
        self.view.frame = CGRectMake(0, 0, 320, 367);
    }

}

ここで、多くのテーブル ビュー コントローラーを再構築する必要があります。C'est la vie.

于 2012-11-01T20:06:57.593 に答える