2

である検索フィールドを最初に非表示にしたいので、を使用setContentOffsetしています。UITableViewtableHeaderView

[self.tableView setContentOffset:CGPointMake(0, 56)]; // No scroll please!

新しいものを押すたびにviewController、contentOffset で検索バーを非表示にしたいと考えています。しかし、viewControllerそのオフセットをポップすると、何らかの理由で無効になり、検索バーが表示されます。どうしてこれなの?

4

3 に答える 3

0

次の場所で試して実装できます

- (void)viewWillAppear:(BOOL)animated {
    [self.tableView setContentOffset:CGPointMake(0, 56)];
}

画面に表示される前にテーブルを正しい位置に配置します。位置の設定中にアニメーションがないことを意味していると思います。

于 2012-12-09T18:50:04.987 に答える
0

ユーザーが画面の一番上までスクロールできないようにしたいと考えています。その場合、次の UITableView デリゲートを実装できます (iOS5 以降):

scrollViewWillEndDragging:withVelocity:targetContentOffset:

これにより、contentOffset の変更の最終ターゲットを変更できます。実装では、次のことを行います。

- (void)scrollViewWillEndDragging:(UIScrollView *)theScrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    if(targetContentOffset->y < 56) {
         targetContentOffset->y=56;
    }
}
于 2012-12-09T18:59:22.633 に答える
0

何かの価値を失うアクション中にその価値を維持しようとしている場合、自然な解決策は自分でそれを保持することです (「保持/復元」)。

  1. 「保留」: フィールドまたはローカル変数へのコンテンツ オフセットを取得します。アップルドキュメント
  2. .. やりたいことは何でもしてください。
  3. 「復元」: コンテンツ オフセットを上記で取得した値に設定します。

(申し訳ありませんが、私は Objective C のコードを書いていないため、正確なコードを提供することはできません。コードを追加するための編集は大歓迎です。)


別の状況では、現在の行を保持してから、その行にスクロールして戻る必要がある場合があります:
(Adapted from: https://stackoverflow.com/a/34270078/199364 )

(Swift)
1. 現在の行を保持します。

let holdIndexPath = tableView.indexPathForSelectedRow()
  1. ..何でもします(おそらく「reloadData」で終わります)。

  2. 保持された行を復元:

// The next line is to make sure the row object exists.
tableView.reloadRowsAtIndexPaths([holdIndexPath], withRowAnimation: .None)
tableView.scrollToRowAtIndexPath(holdIndexPath, atScrollPosition: atScrollPosition, animated: true)
于 2017-04-11T23:38:02.993 に答える