UITableView +コンテンツオフセットを上部に追加


86

UITableViewの上部に、コンテンツ領域のサイズに影響を与えない空白スペースを追加する必要があります。コンテンツを下にシフトしたり、空白のセルを追加したりすることは、私がやりたいことではありません。代わりに、オフセットが必要です。

どうやって?

回答:


288

私があなたをフォローしているかどうかはわかりませんが、私は同じ苦境にあると思います。私の場合、画面上部のADBannerViewにスペースを与える必要があるため、追加したviewDidLoadメソッドで実行しました。

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

必要な値はUIEdgeInsetsMake(top、left、bottom、right)です。

あるいは、Swiftでも同じです。

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

1
上部に「読み込み中」のセルを表示しないようにするためにこれが必要でした。そのセルがレンダリングされたときにエゴインセットに戻り、reloadDataが発生したときに-50上部に戻ります。ありがとう!
ダニエル

23
スクロールインジケーターも調整することをお勧めします:[self.tableView setScrollIndicatorInsets:UIEdgeInsetsMake(50,0,0,0)];
bdev 2013

8
うん、またはさらに良いことに、次のようにスクロールインジケーターを調整します。[self.tableView setScrollIndicatorInsets:[self.tableView contentInset]];
デビッドヘルナンデス

5

「空の」ヘッダービューをテーブルに追加できます...これにより、テーブルの最初の外観にオフセットが表示されますが、スクロールを開始するとオフセットはなくなります。それがあなたが望むものかどうかはわかりません。

永続的なオフセットが必要で、まだセクションヘッダーを使用していない場合は、セクションヘッダーのカスタムビューを作成することで、上記と同様にオフセットを作成できます。特に、セクションが1つしかない場合は、永続的なオフセットの外観が得られます。 。

どちらかがあなたが探しているものであると思われる場合は、サンプルコードを投稿できます。


4

私はジグザットの答えを次のように組み合わせました。

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

- (void)viewDidLoad

したがって、最初のセルは一番上にありません。


4

Swift 5.1

viewDidLoadに以下を追加します

tableView.contentInset.top = 100

本当にそれがすべてです。

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}

2

の周りに「ビュー」をラップたいようですUITableView。あなたが持っている場合はUITableViewControllerIBにUITableView自動的に設定されますviewUITableViewControllerviewプロパティを通常に変更し、そこUIViewに自分を追加UITableViewしてオフセットを指定します。

---編集---私は自分の投稿を読んだだけで、ほとんど意味がないと思いました:)を作成すると、UITableViewController次のようになります(疑似コードで):

UITableViewController.view = UITableView

これは、実際のテーブルがスペース全体を占めることになり、他のビューを追加することさえできないことを意味します。だからあなたは変更する必要があります

UITableViewController.view = UIView

それにテーブルを追加します UIView


0

私はこの答えをこれと組み合わせました:https//stackoverflow.com/a/9450345/1993937

tableViewをコンテンツインセットの上部に表示するために、ビューが最初に表示されたときにtableViewをわずかに下にスクロールしても、上部のスペースが途切れることはありません。(18は私のトップギャップです)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.