Hoe voorkom je dat de UINavigationBar de bovenkant van de weergave bedekt in iOS 7?

Na het updaten naar Xcode 5 zijn de navigatiebalken in alle weergaven van mijn app naar beneden verschoven. Hier zijn enkele schermafbeeldingen, de eerste toont alles in de weergave terwijl het naar beneden is getrokken, en de tweede toont alles onaangeroerd. De zoekbalk moet beginnen waar de navigatiebalk.

Alle inhoud
Alle inhoud inactief

Iemand die weet hoe ik dit kan oplossen?

edit: ik heb deze eerder aanbevolen aanbeveling geprobeerd:

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

Maar het levert heel vreemde resultaten op.

Oplossingspoging

Dit kan zijn omdat ik een “slide-menu” heb onder deze weergavecontroller dat verschijnt vanwege de transparantie van de navigatiebalk.


Antwoord 1, autoriteit 100%

Stel de doorschijnende eigenschap van de navigatiebalk in op NO:

self.navigationController.navigationBar.translucent = NO;

Hiermee wordt voorkomen dat de weergave onder de navigatiebalk en de statusbalk wordt ingekaderd.

Als u de navigatiebalk moet tonen en verbergen, gebruik dan

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

in uw viewDidLoad-methode.


Antwoord 2, autoriteit 14%

In iOS 7is de waarde van de doorschijnende eigenschap van de controller standaard JA, dus je stelt de eigenschap doorschijnend NEEin voor dit probleem.

self.navController.navigationBar.translucent = NO;

Antwoord 3, autoriteit 9%

U kunt uitschakelen
de “Randen verlengen” in Attribute-inspector van View Controller van dit scherm (zoals weergegeven in onderstaande afbeelding)
:

voer hier de afbeeldingsbeschrijving in


Antwoord 4, autoriteit 5%

Dit werkt ook voor Swift op iOS 8.1

navigationController?.navigationBar.translucent = false

Antwoord 5, autoriteit 3%

Als je de doorschijnendheid op je navigationBarwilt behouden, voeg dan aan het einde van je viewDidLoadof in je viewWillAppeardeze regel code toe :

[self.view sendSubviewToBack:self.tableView]

Op de een of andere manier als uw scrollViewsubklasse (UITableView, UICollectionView, etc.) zich op index0 bevindt in uw huidige weergave subviews, het zal automatisch de inzet aanpassen volgens uw navigationBar. En het zou ook geen invloed moeten hebben op uw gebruikersinterface in versies vóór iOS7.

BEWERKEN
Als u uw UITableViewprogrammatisch initialiseert, kunt u deze het beste aan de weergave toevoegen met deze [self.view insertSubview:self.tableView atIndex:0];


Antwoord 6, autoriteit 2%

Swift 4:

Stel de volgende regel code in de viewDidLoad-methode in:

self.navigationController?.navigationBar.isTranslucent = false

Antwoord 7

Je kunt deze methode toevoegen aan je view-controller zoals weergegeven op deze URL:

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

Antwoord 8

Een andere benadering is om self.automaticallyAdjustsScrollViewInsets = YES;in te stellen op uw viewcontroller.
Dit is standaard ingeschakeld. Maar in jouw geval:

Ik zie dat je EGOREfreshHeaderView gebruikt. Het speelt met contentInset van UITableView. Dus als je het loslaat, zal de koptekst de bovenste inzet resetten in plaats van de vorige waarde te herstellen.


Antwoord 9

Als je volledige controle wilt hebben over weergaven en foutieve aanpassingen van iOS wilt voorkomen, subklasse UITableView en pas de inzetstukken (zowel scrollen als indicatoren) aan in -(void)willMoveToWindow:(UIWindow *)newWindow. Werkt voor mij.


Antwoord 10

Een andere optie is om uw Info.plist-bestand in de broncodemodus te openen en de volgende informatie in te voeren:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>

Hopelijk helpt dit.

Other episodes