1. ホーム
  2. ios

[解決済み] UITableViewのセルの前にある空白を削除する

2022-04-21 23:53:16

質問

私は現在 UITableView を、ビューコントローラの先頭ではなく、別の場所に配置しました。これは、ナビゲーションバーを考慮し、上部にヘッダーを追加しようとしていますが、私のコントローラの上部にないので、これは必要ではありません。

の左上隅に置くと UITableView セルを配置したい場所に、セルを配置しない。

今度は、テーブルビューを上に移動してセルが正しい位置に来るようにすれば、別の問題が発生します。スクロールするとセルがそこまで移動することがあります(これは、ナビゲーションコントローラーの上に指を置いている状態です)。

私が手放すと、はい - セルは、検索バーの真下に行きますが、これは明らかにあなたがそれの上にそれらをもたらすことができる方法問題です。

どうすればいいのでしょうか?もっと簡単な方法はないでしょうか?

どのように解決するのですか?

のセルは UITableView は、スクロールダウンしたときに空いたスペースに表示されますか?

もしそうであれば、問題は UITableView これは、ビューで使用しているNavigationコントローラのせいです。 インセットは、スクロールが発生していないときに、コンテンツがナビゲーションバーの下に配置されるようにするために、テーブルビューに追加されます。テーブルがスクロールされると、コンテンツはスクロールし、透明なナビゲーションバーの下に表示されます。この動作は、もちろん、テーブル・ビューがナビゲーション・バーの直下で始まる場合にのみ望まれるものですが、ここではそのようなことはありません。

もうひとつの注意点は、iOSは、ビュー階層内の最初のビューが UIScrollView またはその子孫(例えば UITableViewUICollectionView ). ビュー階層に複数のスクロールビューが含まれる場合。 automaticallyAdjustsScrollViewInsets は、最初のものに対してのみ調整を行います。

この動作を変更する方法を説明します。

a) インターフェースビルダー

  • ビューコントローラを選択します。
  • 属性インスペクタを開く
  • IBの属性インスペクタ(ビューコントローラを選択したとき)に、"Adjust scroll view insets"というプロパティがあり、デフォルトでオンになっています。このオプションのチェックを外してください。



    <サブ (画像提供 Dheeraj D )

このオプションがどのXcodeバージョンで導入されたかは不明ですが(リリースノートで見つけられませんでした)、少なくともバージョン5.1.1では利用可能になっています。

編集:混乱を避けるために、これはコメントで言及された3番目のオプションでした。

b) プログラムによるもの

これをi.e.に追加する。 viewDidLoad (クレジットは スラブコ・ペトコフスキー の答えと クリス・R のコメント)

// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;

// Swift
self.automaticallyAdjustsScrollViewInsets = false

c) これは昔の人に関係あるかもしれません。

を追加することで修正することができます。

tableView.contentInset = UIEdgeInsetsZero

//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero

または、IBを使用していて、ナビゲーションバーが透明でない場合(スクリーンショットでは分かりませんが)

  • ビューコントローラを選択します。
  • 属性インスペクタを開く
  • ビューコントローラーのオプションの「エッジを拡張する」セクションで、「トップバーの下」の選択を解除します。