web-dev-qa-db-ja.com

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

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

どうやって?

80
bluefloyd8

私はあなたをフォローしているかどうかはわかりませんが、私は同じ苦境を抱えていると思います。私の場合、画面の上部にある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)
273
jigzat

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

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

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

5
scottbates22

私はジグザットの答えと以下を組み合わせました:

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

- (void)viewDidLoad

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

4
richy

ラップしたい音UITableViewの周りの「ビュー」。 IBにUITableViewControllerがある場合、UITableViewは自動的にviewUITableViewControllerに設定されます。 viewプロパティを通常のUIViewに変更し、そこにUITableViewを追加してオフセットを与えます。

---編集---私はちょうど私の投稿を読んで、それがほとんど意味をなさないと思った:) UITableViewControllerを作成するとき、あなたはこれを得る(擬似コードで):

UITableViewController.view = UITableView

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

UITableViewController.view = UIView

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

2

私はこの答えとこれを組み合わせました: 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];
0
TheJeff