2016-04-24 14 views
0

ich eine rötlich durchscheinend UINavigationBar (für iOS9) machen wollen, und ich fand, dass die folgenden Codes sind wichtig:Durchlässiger UINavigationBar kann nicht oben auf dem Bildschirm erweitern

navController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
    navController.navigationBar.shadowImage = UIImage() 
    navController.navigationBar.backgroundColor = UIColor(red: 1.0,green: 0.3,blue: 0.3,alpha: 0.9) 
    navController.navigationBar.translucent = true 

Es funktioniert gut, wenn ich einfach eine UINavigationBar erstellt (anstatt einen UINavigationController zu erstellen), aber es sieht so aus, als hätte ich einen UINavigationController erstellt.

enter image description here fand ich die Täter die Linie navController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) , zu sein, aber wenn ich es entfernen, sieht die Bar dies wie:

enter image description here So wie kann ich dieses Problem lösen? (Ich schaffe das UINavigationController programmatisch und entschuldigen uns für die Unannehmlichkeiten, die ich nicht Bilder einzubetten kann)

Antwort

0

Edit:

Sie müssen die UINavigationBar, um eine Unterklasse der lichtdurchlässigen Hintergrund der gewünschten Farbe zu erhalten. Werfen Sie einen Blick auf diese Antwort:

https://stackoverflow.com/a/19043174/2082569

erforderlichen Code auch hier als Referenz hinzu:

@interface UnderlayNavigationBar : UINavigationBar 

@end 

@interface UnderlayNavigationBar() 
{ 
    UIView* _underlayView; 
} 

- (UIView*) underlayView; 

@end 

.

@implementation UnderlayNavigationBar 

- (void) didAddSubview:(UIView *)subview 
{ 
    [super didAddSubview:subview]; 

    if(subview != _underlayView) 
    { 
     UIView* underlayView = self.underlayView; 
     [underlayView removeFromSuperview]; 
     [self insertSubview:underlayView atIndex:1]; 
    } 
} 

- (UIView*) underlayView 
{ 
    if(_underlayView == nil) 
    { 
     const CGFloat statusBarHeight = 20; // Make this dynamic in your own code... 
     const CGSize selfSize = self.frame.size; 

     _underlayView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, selfSize.width, selfSize.height + statusBarHeight)]; 
     [_underlayView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; 
     [_underlayView setBackgroundColor:[UIColor colorWithRed:1.0f green:0.3f blue:0.3f alpha:1.0f]]; 
     [_underlayView setAlpha:0.7f]; 
     [_underlayView setUserInteractionEnabled:NO]; 
    } 

    return _underlayView; 
} 

@end 

.

UIViewController* rootViewController = ...; 
UINavigationController* navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[UnderlayNavigationBar class] toolbarClass:nil]; 
[navigationController setViewControllers:@[rootViewController]]; 
+0

Es funktioniert immer noch nicht für mich .. Es funktioniert richtig auf Ihrem Gerät? – user2232335

+0

Entschuldigung, ich habe eine benutzerdefinierte Navigationsleiste in meinem Projekt verwendet. Nahm den relevanten Teil von einer vorhandenen Antwort auf SO. Bearbeitete die Antwort; Bitte werfen Sie einen Blick und lassen Sie es mich wissen, wenn es funktioniert. Natürlich ist die Antwort in Objective-C, so dass Sie dies möglicherweise zu swift konvertieren müssen. :) – atulkhatri

Verwandte Themen