it-swarm.com.de

Wie kann ich verhindern, dass UINavigationBar die Draufsicht in iOS 7 verdeckt?

Nach dem Update auf Xcode 5 sind die Navigationsleisten in allen Ansichten meiner App nach unten verschoben. Hier sind einige Screenshots, der erste zeigt alles in der Ansicht, während er heruntergezogen wird, und der zweite zeigt alles unberührt. Die Suchleiste sollte dort beginnen, wo sich die Navigationsleiste befindet. 

All ContentAll Content on Idle

Weiß jemand, wie ich das reparieren kann? 

edit: ich habe diese vorige empfehlung ausprobiert: 

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

Aber es führt zu sehr seltsamen Ergebnissen. 

Solution Attempt

Dies kann daran liegen, dass sich unter diesem Ansichtscontroller ein "Folienmenü" befindet, das aufgrund der Transparenz der Navigationsleiste angezeigt wird. 

96
Sam D20

Setzen Sie die durchscheinende Eigenschaft der Navigationsleiste auf NO :

self.navigationController.navigationBar.translucent = NO;

Dadurch wird verhindert, dass die Ansicht unter der Navigationsleiste und der Statusleiste gerahmt wird.

Wenn Sie die Navigationsleiste ein- und ausblenden müssen, verwenden Sie

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

in Ihrer viewDidLoad-Methode.

225
Deepesh

In iOS 7 durch Standardwerte Der gesamte durchscheinende Eigenschaftswert des Controllers lautet YES. Sie können also die durchscheinende Eigenschaft NO für dieses Problem festlegen.

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

Sie können "Kanten erweitern" im Attribut-Inspector von View Controller dieses Bildschirms deaktivieren (wie in der Abbildung unten gezeigt)

 enter image description here

21
Achyut Sagar

Dies funktioniert auch für Swift unter iOS 8.1

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

Wenn Sie die Transluzenz Ihrer navigationBar beibehalten möchten, fügen Sie am Ende Ihrer viewDidLoad oder in Ihrer viewWillAppear die folgende Codezeile ein:

[self.view sendSubviewToBack:self.tableView]

Wenn sich Ihre scrollView-Unterklasse (UITableView, UICollectionView usw.) in Ihrer aktuellen Ansicht index auf subviews 0 befindet, werden die Einfügungen automatisch entsprechend Ihrer navigationBar angepasst. In Versionen vor iOS7 sollte dies auch keine Auswirkungen auf Ihre Benutzeroberfläche haben.


EDIT Wenn Sie Ihre UITableView programmgesteuert initialisieren, sollten Sie sie am besten mit diesem [self.view insertSubview:self.tableView atIndex:0]; zur Ansicht hinzufügen.

8
jbouaziz

Swift 4 :

Legen Sie in der viewDidLoad-Methode die folgende Codezeile fest:

self.navigationController?.navigationBar.isTranslucent = false
4

Sie können diese Methode in Ihren View-Controller einfügen, wie in diesem URL gezeigt:

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

Ein anderer Ansatz besteht darin, self.automaticallyAdjustsScrollViewInsets = YES; auf Ihrem View-Controller festzulegen .. _. Dies ist standardmäßig aktiviert. Aber in deinem Fall:

Ich sehe, Sie verwenden EGORefreshHeaderView. Es spielt mit contentInset von UITableView. Wenn Sie ihn freigeben, setzt der Header den oberen Wert zurück, anstatt den vorherigen Wert wiederherzustellen.

2
Krivoblotsky

Die obigen Antworten können Ihr Problem beheben, ergeben jedoch viele andere Probleme, zum Beispiel: Benutzerdefinierte Ansichten werden nicht durch Y zentriert, da die Navigationsleiste undurchsichtig wird. Daher werden alle Ihre Ansichten nach unten gedrückt.

Die transluzente Navigationsleiste verursacht weder dieses Problem noch das von Ihnen in iOS 11+ veröffentlichte Problem. Ich fand jedoch keine Problemumgehung, damit es auf allen iOS-Plattformen ab iOS 9 funktioniert.

0
Mr Jox