1. ホーム
  2. iphone

[解決済み] iOS7 SDKでナビゲーションバーが表示されるようになりました。

2022-09-12 20:39:12

質問

CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

以前のバージョンでは、正しく動作しています。検索バーが statusbar とナビゲーションバーの下に表示されます。そのため tableview は検索バーの下に表示される

しかし、これを Xcode 5 sdk iOS 7 を実行すると、検索バーが表示されず(ステータスバーとナビゲーションバーの下に配置されていると思います)、また、ナビゲーションバーがテーブルビューの上に表示されています。

で修正されるのでしょうか? iOS 7 安定版リリースで修正されますか?

それとも私のコーディングに問題があるのでしょうか?

それとも、y (y = statubar height + nav bar height) の値を iOS 7 ?

私は最近、iOS 7 で私のアプリをテストするために Xcode 5 DP をダウンロードしました。私が最初に気づいて確認したことは、ステータス バーとナビゲーション バーを考慮して、ビューの境界が常にリサイズされないということです。

viewDidLayoutSubviewsで、私はビューの境界を表示します。

{{0, 0}, {320, 568}}

この結果、私のコンテンツはナビゲーションバーとステータスバーの下に表示されることになります。

メイン画面の高さを取得し、ステータス バーの高さとナビゲーション バーの高さを差し引くことによって、高さを自分で計算できることは知っていますが、それは不必要な余分な作業のように思えます。

この問題を経験した人は他にいますか?

UPDATEしてください。

この特定の問題に対する解決策を見つけました。ナビゲーションバーの半透明のプロパティをNOに設定します。

self.navigationController.navigationBar.translucent = NO;

これにより、ナビゲーションバーとステータスバーの下に枠で囲まれたビューが修正されます。

しかし、ナビゲーション バーを半透明にしたい場合の修正方法は見つかっていません。たとえば、写真をフルスクリーンで表示する場合、私はナビゲーション バーを半透明にし、表示をその下の枠に収めたいと考えています。しかし、ナビゲーションバーの表示/非表示を切り替えると、さらに奇妙な結果が発生しました。最初のサブビュー ( UIScrollView ) は、その境界の y 原点が毎回変更されます。

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

それは完全に正しいわけではありません。iOS 7 で導入された新しいプロパティがあり、以前のバージョンの iOS のようにレイアウトの動作を調整することができます。このコード片をビュー コントローラーに配置すれば、うまくいくはずです。ナビゲーションバーが占めるスペースは自動的に計算されるはずです。

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

上記を -(void)viewDidLoad メソッドに追加する必要があります。

注意:APIがベータ版から変更されているため、現在はiOS 7の最新のGMリリースとXcode 5を使用する必要があります。