web-dev-qa-db-ja.com

iOS 7でUINavigationBarがビューの上部を覆わないようにするにはどうすればよいですか?

Xcode 5に更新した後、アプリのすべてのビューのナビゲーションバーが下に移動しました。以下に、いくつかのスクリーンショットを示します。最初のビューは、プルダウンされたビューのすべてを表示し、2番目は、すべてをそのまま表示します。検索バーは、ナビゲーションバーの場所から開始する必要があります。

All ContentAll Content on Idle

誰も私がこれを修正する方法を知っていますか?

編集:私はこの以前の推奨事項を試してみました:

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

しかし、それは非常に奇妙な結果をもたらします。

Solution Attempt

これは、このView Controllerの下にナビゲーションバーの透明性のために表示される「スライドメニュー」があるためかもしれません。

97
Sam D20

ナビゲーションバーの半透明プロパティをNOに設定

self.navigationController.navigationBar.translucent = NO;

これにより、ビューがナビゲーションバーとステータスバーの下に表示されなくなります。

ナビゲーションバーを表示および非表示にする必要がある場合は、

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific

viewDidLoadメソッドで。

230
Deepesh

iOS 7では、デフォルトですべてのコントローラーの半透明プロパティ値はYESであるため、この問題に対して半透明プロパティNOを設定します

self.navController.navigationBar.translucent = NO;
31
Sumit Mundra

この画面のView Controllerの属性インスペクターで「エッジの拡張」を無効にできます(下図を参照)。

enter image description here

21
Achyut Sagar

これはSwiftでもiOS 8.1で機能します

navigationController?.navigationBar.translucent = false
12
uplearnedu.com

navigationBarの半透明性を維持する場合は、viewDidLoadの最後またはviewWillAppearに次のコード行を追加します。

[self.view sendSubviewToBack:self.tableView]

どういうわけかscrollViewサブクラス(UITableViewUICollectionViewなど)が現在のビューindexsubviews 0にある場合、自動的にインセットを調整しますnavigationBarに。また、iOS7より前のバージョンのUIにも影響することはありません。


EDITUITableViewをプログラムで初期化する場合、この[self.view insertSubview:self.tableView atIndex:0];を使用してビューに追加することをお勧めします

8
jbouaziz

Swift 4

ViewDidLoadメソッドで次のコード行を設定します。

self.navigationController?.navigationBar.isTranslucent = false
4

この URL に示すように、このメソッドをView Controllerに追加できます。

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame = 
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}
3
malkoty

別のアプローチは、View Controllerでself.automaticallyAdjustsScrollViewInsets = YES;を設定することです。これはデフォルトで有効になっています。しかし、あなたの場合:

EGORefreshHeaderViewを使用しているようです。 UITableViewのcontentInsetで再生します。したがって、リリースすると、ヘッダーは前の値を復元するのではなく、上部のインセットをリセットします。

2
Krivoblotsky

上記の答えはあなたの問題を解決するかもしれませんが、例えば、他の多くの問題を引き起こします:例えば、カスタムビューはナビゲーションバーが不透明になり、すべてのビューを押し下げるため、Yによって中央揃えされません。

半透明のナビゲーションバーを使用しても、この問題は発生せず、iOS 11以降で投稿した問題も発生しません。ただし、iOS 9以降のすべてのiOSプラットフォームで動作する回避策は見つかりませんでした。

0
Mr Jox