iOS UINavigatieBar shift weergave naar beneden

Ik heb een weergave die wordt gebruikt in een UINavigationController en en wordt automatisch naar beneden gedrukt om in het venster te passen zoals verwacht. Ik moet echter dezelfde weergave als een model presenteren en het heeft geen UINavigationController (of nodig) dus ik voeg zojuist een UINavigationBar toe zoals:

if (presentedAsModal == YES) {
    UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    [self.view addSubview:navigationBar];

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonSystemItemDone target:nil action:@selector(dismissModalViewControllerAnimated:)];

    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
    item.leftBarButtonItem = leftButton;
    item.hidesBackButton = YES;
    [navigationBar pushNavigationItem:item animated:NO];

    [[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:0/255.0f green:180/255.0f blue:220/255.0f alpha:1.f]];
    [[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:0/255.0f green:140/255.0f blue:180/255.0f alpha:1.f]];
    }

De navigatiebalk duwt de VC echter niet automatisch naar beneden, waardoor een deel van mijn weergave wordt bedekt. is er een manier om de grootte van de VC aan te passen aan de nieuwe beschikbare ruimte zodra de navigatiebalk is toegevoegd (ik wil dit niet handmatig doen).

1

1 antwoord

U kunt de vc in een navigatiecontroller insluiten voor modale presentatie of een kleine truc uitvoeren om de oorsprong van de grenzen aan te passen:

CGRect bounds = self.bounds;
bounds.origin.y = -44;
self.bounds = bounds;
...
UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, -44, 320, 44)];
...
2
toegevoegd
De navigatiecontroller maakt uw weergave kleiner voordat u deze aan zijn weergave toevoegt, zodat er geen "navigatiebalk krimpend gedrag" is. Een navigatiebalk is een weergave/controle zoals al het andere
toegevoegd de auteur Martin Ullrich, de bron
Dat werkt, ik wou dat er een schoon bezit was dat ik kon gebruiken om dit te bereiken, maar ik denk het niet? Ik wist dat ik het in een NavController kon plaatsen, maar het leek verkeerd, aangezien ik de NavController niet alleen nodig had voor de knop voor het uiterlijk/de achterkant.
toegevoegd de auteur KDM, de bron