Vraag Stel de UINavigationBar-hoogte in zoals in de iOS 7-kalenderapp


Ik heb een navigatiebalk nodig zoals in de agenda in iOS 7.

Ik heb gemerkt dat de navigatiebalk geen vervaging achter zich heeft.

Calendar app iOS7

bij het teruggaan van een detailweergave. Het is gewoon de "belangrijkste" NavigationBar dat is normaal".

Calendar app iOS7

Heeft iemand enig idee hoe dit te doen?

Ik heb geprobeerd om dit te doen:

[self.navigationController.navigationBar setFrame:CGRectMake(0, 0, 320, 88)];

Maar hierdoor zouden de titel en de knoppen 44px omlaag gaan.

Ik heb nog een idee om een ​​andere navigatiebalk toe te voegen onder de navigationController.navigationBar, maar dan heb ik een lijn onder de eerste navigatiebalk. Iedereen weet hoe dit te verwijderen?

Bedankt!


21
2017-09-20 20:44


oorsprong


antwoorden:


Ik heb het gemaakt!

Ik heb een andere navigatiebalk onder de "hoofd" navigatiebalk geplaatst. De "hoofd" Navigatiebalk-schaduwlijn verwijderd.

Verwijder de NavigationBar doorschijnend en stel de achtergrondkleur in op 97% wit. (het is standaard). Als translucent JA is, ziet het er raar uit als de inhoud achterblijft.

[self.navigationController.navigationBar setTranslucent:NO];
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithWhite:0.97 alpha:1]];
[NavigationBarExtension setTranslucent:NO];
[NavigationBarExtension setBarTintColor:[UIColor colorWithWhite:0.97 alpha:1]];

Code om de regel te verwijderen (doe dit in viewWillAppear: want als je op een andere viewcontroller drukt, moet de regel terugkomen)

- (void)viewWillAppear:(BOOL)animated {
    for (UIView *view in self.navigationController.navigationBar.subviews) {
        if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {
            for (UIView *view2 in view.subviews) {
                if ([view2 isKindOfClass:[UIImageView class]] && view2.frame.size.height < 1) {
                    [view2 setHidden:YES];
                    break;
                }
            }
        }
    }
}

Code om de regel weer te geven bij het indrukken van een andere view controller:

- (void)viewWillAppear:(BOOL)animated {
    for (UIView *view in self.navigationController.navigationBar.subviews) {
        if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {
            for (UIView *view2 in view.subviews) {
                if ([view2 isKindOfClass:[UIImageView class]] && view2.frame.size.height < 1) {
                    [view2 setHidden:NO];
                    break;
                }
            }
        }
    }
}

5
2017-09-20 21:41