1. ホーム
  2. アイオス

[解決済み】iOS 7: UITableViewがステータスバーの下に表示される

2022-04-09 08:49:47

質問

私のアプリケーションの最初の画面は UITableViewController ナビゲーションバーがないため、コンテンツはステータスバーの下に流れ、テキストの衝突が多くなります。の両方のプロパティを調整しました。 Under top barsAdjust scroll view insets を使用すると、実際に下にスクロールしなくなりますが、その代償としてテーブルビューの上部を下に維持することになります。私は UITableView フレームを 20 ピクセルオフセットする必要がありますが、効果がないようです。現在、アプリを iOS 6 と互換性が必要なため、iOS 7 Storyboards にジャンプして自動レイアウトに上部の高さガイドを使用するように強制することはできません。どなたか、両方のバージョンで機能する解決策を見つけた方はいらっしゃいますか?

試してみたこと edgesForExtendedLayout のStoryboard内の設定を変更する。 Under top barsAdjust scroll view で、新しい領域にフレームを強制的に移動させます。

百聞は一見に如かず。

解決方法は?

これを再現したい方は、以下の手順を踏むだけです。

  1. iOSプロジェクトを新規に作成します。
  2. メインストーリーボードを開き、default/initialを削除します。 UIViewController
  3. をドラッグして、新しい UITableViewController オブジェクト・ライブラリから
  4. 初期ビューコントローラーとして設定する
  5. テーブルにテストデータを供給する

上記の手順でアプリを実行すると、Xcodeのチェックボックスで "Extend Edges Under {Top, Bottom, Opaque}を調整することも含めて、何もできないことがわかります。Bars"は、ステータスバーの下に最初の行が表示されるのを阻止するために機能します。

例)上記のシナリオの場合、以下のようになります。 いいえ の効果があります。

// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;

この問題は非常にイライラさせられますが、私はApple側のバグだと考えています。 UITableViewController をオブジェクトライブラリから削除してください。

私は、例えば20pxのデルタを使用するなど、何らかの形でマジックナンバーを使用してこの問題を解決しようとしているすべての人に反対です。このような密結合のプログラミングは、Appleがここで私たちに望んでいることではありません。

この問題に対して、私は2つの解決策を発見しました。

  • を保存する。 UITableViewController のシーン :

    を維持したい場合は UITableViewController を別のビューに手動で配置することなく、ストーリーボードに埋め込むことができます。 UITableViewController の中に UINavigationController (Editor > Embed In > Navigation Controller)で、インスペクタの "Shows Navigation Bar" のチェックを外してください。これにより、余分な微調整をすることなく問題が解決され、また UITableViewController のシーンがストーリーボードに表示されます。

  • AutoLayout を使って UITableView 別のビューに (Appleはこのような方法を望んでいると思います。) :

    空の UIViewController をドラッグして UITableView をその中に入れてください。次に、Ctrlキーを押しながら UITableView をステータスバーの方に移動します。マウスがステータスバーの一番下まで来ると、「"トップレイアウトガイド"」というオートレイアウトのバブルが表示されます。マウスを離し、"Vertical Spacing"を選択します。これでレイアウトシステムがステータスバーの真下に配置するようになります。

私は空のアプリケーションで両方の方法をテストし、どちらも動作しました。あなたのプロジェクトで動作させるためには、いくつかの特別な調整が必要かもしれません。