wake-up-neo.com

Entfernen Sie den unteren Rand der Navigationsleiste von iOS 7

Gibt es eine Möglichkeit, den unteren Rand zu löschen, den iOS7 automatisch unter der Navigationsleiste anzeigt?

36
Gnamm

Wenn ich es richtig verstanden habe, versuche es richtig

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
45
muffe

Das funktioniert auf iOS7 mit durchscheinender Navigation nicht oder nicht ...

Eine Paste aus der Apple-Dokumentation;

Beschreibung Das Schattenbild, das für die Navigationsleiste verwendet werden soll . Der Standardwert ist Null, was dem Standardschattenbild entspricht. Ist dies nicht der Fall, stellt diese Eigenschaft ein benutzerdefiniertes Schattenbild dar, das anstelle des Standardwerts angezeigt werden soll. Damit ein benutzerdefiniertes Schattenbild angezeigt werden kann, muss ein benutzerdefiniertes Hintergrundbild auch mit der Methode setBackgroundImage: forBarMetrics: festgelegt werden. Wenn das Standardhintergrundbild verwendet wird, wird das Standardschattenbild unabhängig vom Wert dieser Eigenschaft verwendet.

Im Grunde müssen Sie also setBackgroundImage implementierenZusätzlicher Hinweis, unter iOS7 wird das Aussehen nicht mehr verwendet, Sie ändern jedoch die Navigationsleiste im viewController-Kontext, in dem Sie sich gerade befinden.

Das ist:

    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];

In meinem Fall stelle ich dies in viewDidLoad (benutzerdefiniertes Verhalten kann für jeden UIViewController im UINavigationViewController hinzugefügt werden).

48
wolffan

basierend auf muffed2k Antwort + Programmierung Thomas Kommentar, Ich verwende UINavigationBar ohne Hintergrundbild (ios5.1/6.0) und ohne unteren Rand (ios7.0):

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6)
    {
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    }else
    {
        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
    }
12
user1105951

Wenn Sie Swift verwenden und auf diese Frage stoßen, versuchen Sie es in Ihrem ViewController:

override func viewDidLoad() {
    super.viewDidLoad()

    /// ...

    navigationController?.navigationBar.shadowImage = UIImage();
    navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)

    //...
}

Basierend auf @ wolffans Antwort oben

6
A Fader Darkly

Für mich folgten folgende Arbeiten an iOS 7 bis 9+, wenn translucent auf false gesetzt ist.

UINavigationBar.appearance().transluscent = false
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
4

Ich weiß, dass es bereits eine akzeptierte Antwort gibt, aber eine andere Möglichkeit, clipToBounds auf true zu setzen.

Hier ist die eine Codezeile, die es in Swift tun kann

self.navigationController?.navigationBar.clipsToBounds = true

Arbeitete für mich wie ein Zauber.

2
user5209290

Funktioniert wie ein Zauber: Swift 3.x Version

    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
1

für Ziel C

self.navigationController.navigationBar.clipsToBounds = YES;
1
Aftab

Wenn Sie iOS 7 als Ziel festlegen und nicht ein Hintergrundbild setzen, funktioniert dies:

        CGFloat navigationBarWidth = self.navigationController.navigationBar.frame.size.width;
        CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
        CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;

        UIGraphicsBeginImageContextWithOptions(CGSizeMake(navigationBarWidth, navigationBarHeight + statusBarHeight), NO, 0.0);
        UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        [[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault];

        //the following line takes away the border but only works if a background image is set (above)
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

Die Idee kam aus @ muffe2ks Antwort und diesem SO post .

0
kraftydevil