私のルートコントローラーはTabBarController(タブ付きアプリケーション)です。タブの1つはUITableViewControllerです。それに切り替えてアイテムをスクロールすると、上部のステータスバー(信号、バッテリーなど)の下に表示されます。私はそれを望んでいません。私はそれを不透明にするか...何かしたいです。ステータスのものの下にあるテーブルセルのテキストが視覚的に不快です。
理解できないいくつかの属性設定を使用して、ストーリーボードからこれを修正できますか?または、サブクラスにいくつかのメソッドを追加する必要がありますか?または、UITableViewControllerを他の種類のコントローラーでラップする必要がありますか?
Storyboardの属性ページで、ViewControllerレイアウトとエッジの拡張設定のさまざまなバリエーションを試しましたが、どれもそれを改善するようには見えません。
Update:私の問題は iOS 7:ステータスバーの下にUITableViewが表示される と非常に似ていると思います。唯一の違いは、私がTabBarControllerに埋め込まれていることです。その場合はルートビューです。 NavigationController
に埋め込み、Show Navigation Bar
をFalse
に変更しましたが、違いはありませんでした。
スクリーンショット:
2つの子、1つの単一ビュー、およびもう1つがテーブルビューであるタブ付きコントローラーを示すストーリーボード(縮小)。
Tab Bar Controllerの設定
Table View Controllerの設定
電話でアプリがどのように見えるか
ストーリーの終わり方
以下の多くの回答にもかかわらず、実際に機能するものはありませんでした。少しだけですが、そうではありません。 Embeded in NavigationControllerアプローチも試しましたが、これにも問題がありました。しかし、うまくいったのはこれでした:
delegate
およびtableSource
を新しいコントローラーとして設定します誰かがストーリーの終了方法を(現在の長い)質問の終わりに見逃した場合、短い答えは:se a指定された目標を達成したい場合は、TableViewControllerではなく、TableViewを指定したシンプルなUIViewController。
ViewDidLoadでこれを試してください:
self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
20 pxはステータスバーの高さです。ナビゲーションバーがある場合は、20ではなく64を使用します
誰かがまだこのスレッドを読んでいる場合:
私のために働いたのは、親のTab Bar Controllerの「Edges」オプションのチェックを外すことでもありました。これにより、iOS6およびiOS7で一貫した動作が提供されます。
SWRevealControllerを使用すると、同じ問題が発生していました。
上のコメントと下のコメントを使用して、これを
-(void)viewWillAppear instead of ViewDidLoad
self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
次のようなものをView ControllerのviewWillAppear
メソッドに追加しようとしましたか?
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
ストーリーボードを使用してこれを解決することもできます。
プロジェクトアウトライン(エディターの左側)からテーブルビューを選択し、[プロパティ](右側)> [サイズインスペクター]タブ> [スクロールビュー]> [コンテンツインセット]> [トップ]に移動します。
次をviewWillAppear
に追加しました
self.tableView.contentInset = UIEdgeInsetsMake(22, 0, 0, 0);
NavBarをnonTranslucentにしたいだけのように見えます。
[self.navigationController.navigationBar setTranslucent:NO];
私は同じ問題に遭遇し、私のために働いた解決策はセクションヘッダービューを追加することでした:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
次に、ヘッダーのテキストのOrigin.yに20を追加しました。
次に、元の高さに20を追加してヘッダーの高さを変更しました
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return myHeight+20;
}
IOS 8.4の時点では、他の回答にリストされているさまざまなストーリーボードオプションを使用しても何も得られませんでした。
私は、タブコントローラーに通常のビューを配置し、それを "コンテナービュー"で埋めることで、次元定数に頼らずにこれを回避し、次に "埋め込み"セグエでUITableViewControllerに接続しました。
テーブルは、ナビゲーションバーと下部のタブバーの両方を尊重するようになりました。
テーブルの@IBOutletが
@IBOutlet var tableView: UITableView!
関数prepareTable()を作成します。そのメソッドに以下の行を追加します
tableView.contentInset.top = UIApplication.shared.statusBarFrame.height
viewDidLoad()からこのメソッドを呼び出します
私にとって簡単な解決策はありました(コードはC#であり、それは無効だと思われるためです)...
UITableViewControllerコンストラクターで新しいUIViewを作成します(TableViewと同じディメンションを設定します)。
TableViewを新しく作成したビューに追加します。
新しく作成したビューをUITableViewControllerのビュープロパティに設定...
var view = new UIView ();
view.Frame = this.TableView.Frame;
view.AddSubview (this.TableView);
this.View = view;
アウトラインビュー、またはストーリーボードが、現在テーブルビューコントローラーを備えているTab Bar Controllerであるとします。アプリを実行すると、テーブルビューのセルは、透明な背景があるように見えるステータスバーの下で実行されます。これはダメだ!
StackOverflowで見つけることができるものを何でも試して何時間も費やした場合は、おそらく新しいキャリアを検討する時間であり、1-800-LUV-TRUKまたは1-800-SHT-KIKRをダイヤルする準備をしているように感じました背中を軽くたたいて、このような時にあなたが飲むエリクサーを開いてください。それはあなたのせいではないからです。本当に。 Travisは、viewDidLoad、viewWillAppear、viewDidAppear、またはIBでのボタンの選択/選択解除のコードがこの状況で役立たないことは絶対に正しいです。
上記のTravisのソリューションは確かに機能しますが、それは少し長く、コードのコピーと貼り付けがあり、バグバニーのエピソードが私にとってはフルレングスの映画のように感じるほど短い注意期間があります。複雑なものはすべて台無しにします。しかし、ちょっと、あなたの走行距離は、おそらくそうではないかもしれませんが、変わるでしょう。とにかく...
IOS 9を実行しているアプリのXcode 7.3(私は7と8を想定していますが、これについては確かに知らず、現在チェックするのが面倒です)には、コードを記述する必要がない簡単な方法があります。そして、それはすべてXcodeのInterface Builder内で行われます。
(注意:用語のいずれかが正確でない場合はごめんなさい。間違っていた場所を教えてください。間違ったラベルを修正します。))
Interface Builderの「ユーティリティ」領域に移動し、ライブラリペインからオブジェクトライブラリを選択します。
Navigation View Controllerオブジェクトを選択して、ストーリーボードのシーンにドラッグします。ドラッグ中に2つのシーンアイテムが表示されます。これらは、Navigation ControllerシーンとTable View Controllerシーンです。
Navigation Controllerシーンに付随する重複したTable View Controllerシーンを削除します。
Tab Bar ControllerとTable View Controller間のリレーションシップ接続を選択し、「削除」を押します。
ストーリーボードで、Navigation ControllerとTable View Controllerを希望する方法で再配置します。
Tab Bar ControllerシーンからNavigation ControllerシーンにControlキーを押しながらドラッグし、「Relationship Segue、view controller」を選択します。
Navigation ControllerシーンからTable View ControllerシーンにControlキーを押しながらドラッグし、「Relationship Segue、root View Controller」を選択します。
最後に、ユーティリティのオブジェクトライブラリで、ナビゲーションアイテムオブジェクトをテーブルビューコントローラーシーンのテーブルビューにドラッグします。
これで、アプリを実行すると、ナビゲーションバーが表示され、テーブルビューのセルが透明なステータスバーの下に表示されなくなります。
お役に立てれば。