Jak ukryć dolną linię UINavigationBar 1px


443

Mam aplikację, która czasami potrzebuje paska nawigacji, aby wtopić się w treść.

Czy ktoś wie, jak się pozbyć lub zmienić kolor tego irytującego małego paska?

Na poniższym obrazku mam - mówię o tej linii o wysokości 1px poniżej „Root View Controller”

wprowadź opis zdjęcia tutaj



jak zwiększyć 1px wysokości nawigacji?
Suresh Durishetti,

Odpowiedzi:


738

W systemie iOS 13:

Użyj .shadowColornieruchomości

Jeśli ta właściwość jest równa zero lub zawiera czysty kolor, pasek nie wyświetla cienia

Na przykład:

let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence

Dla iOS 12 i niższych:

Aby to zrobić, należy ustawić niestandardowy obraz cienia. Ale aby pokazać obraz cienia, musisz również ustawić niestandardowy obraz tła, cytat z dokumentacji Apple:

Aby wyświetlić niestandardowy obraz cienia, niestandardowy obraz tła musi być również ustawiony za pomocą metody setBackgroundImage (_: for :). Jeśli zostanie użyty domyślny obraz tła, zostanie użyty domyślny obraz cienia, niezależnie od wartości tej właściwości.

Więc:

let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
                                                        for: .default)
navigationBar.shadowImage = UIImage()

Powyżej jest jedynym „oficjalnym” sposobem na ukrycie tego. Niestety usuwa przezroczystość paska.

Nie chcę obrazu tła, tylko kolor

Masz te opcje:

  1. Jednolity kolor, bez półprzezroczystości:

    navigationBar.barTintColor = UIColor.redColor()
    navigationBar.isTranslucent = false
    navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationBar.shadowImage = UIImage()
  2. Utwórz mały obraz tła wypełniony kolorem i użyj go.

  3. Użyj metody „hacky” opisanej poniżej. Dzięki temu pasek będzie przezroczysty.

Jak zachować przejrzystość paska?

Aby zachować przejrzystość, potrzebujesz innego podejścia, wygląda to na hack, ale działa dobrze. Cień, który próbujemy usunąć, to linia włosów UIImageViewgdzieś pod UINavigationBar. Możemy go znaleźć i ukryć / pokazać w razie potrzeby.

Poniższe instrukcje zakładają, że potrzebujesz linii włosów ukrytej tylko w jednym kontrolerze w Twojej UINavigationControllerhierarchii.

  1. Deklaracja zmiennej instancji:

    private var shadowImageView: UIImageView?
  2. Dodaj metodę, która znajdzie ten cień (linia włosów) UIImageView:

    private func findShadowImage(under view: UIView) -> UIImageView? {
        if view is UIImageView && view.bounds.size.height <= 1 {
            return (view as! UIImageView)
        }
    
        for subview in view.subviews {
            if let imageView = findShadowImage(under: subview) {
                return imageView
            }
        }
        return nil
    }
  3. Dodaj / edytuj viewWillAppear/viewWillDisappearmetody:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        if shadowImageView == nil {
            shadowImageView = findShadowImage(under: navigationController!.navigationBar)
        }
        shadowImageView?.isHidden = true
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        shadowImageView?.isHidden = false
    }

Ta sama metoda powinna również działać w przypadku UISearchBarlinii włosów i (prawie) wszystkiego, co musisz ukryć :)

Ogromne podziękowania dla @Leo Natan za oryginalny pomysł!


103
Możesz także ustawić widok UINavigationBarwłaściwości:clipsToBounds = YES
cleverbit

3
@richarddas clipsToBounds = YESdziała jak urok! Dzięki!
romeouald

3
ClipToBounds nie zawsze działa w przypadku niektórych układów. Ta odpowiedź była dla mnie idealna. Tylko ja utworzyłem podklasę UINavigationBar i użyłem powyższego kodu, aby ukryć obraz cienia w metodach -layoutSubview. Dzięki!
cgossain

7
Wystarczy zauważyć, że miałem problem z tym, że mój górny pasek stanu iOS stał się półprzezroczysty i mogłem zobaczyć widok tabeli przewijający się za paskiem UINavigation. Naprawiłem to ustawiając setTranslucent = NO.
Vlad

2
W iOS 10 wydaje się, że kiedy viewWillAppear się nazywa, nie możemy dostaćshadowImageView
xi.lin

241

Poniżej może pomóc po prostu!

Szybki:

self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")

Cel C:

[self.navigationController.navigationBar setValue:@(YES) forKeyPath:@"hidesShadow"];

6
Używam Xcode 8 i programisty dla> iOS 8 i żadne z powyższych nie działało dla mnie, z wyjątkiem tego.
Vakas

2
Również na XCode 8 i> iOS 8. To jedyna odpowiedź, która zadziałała dla mnie.
cloudcal

1
To jedyna krótka i prosta odpowiedź, która działała dla mnie na iOS 10 i Xcode 8.3.1. Dzięki stary.
Vishal Sonawane

1
Cel-C: self.navigationController.navigationBar.shadowImage = [UIImage new];
Marcelo dos Santos

1
Tylko to działa dla mnie w wersji iOS 13.3.1 iPad.
Ravi

145

Jeśli chcesz po prostu użyć jednolitego koloru paska nawigacyjnego i skonfigurowałeś go w swojej serii ujęć, użyj tego kodu w swojej AppDelegateklasie, aby usunąć granicę 1 piksela za pośrednictwem wyglądu proxy:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init]
                                  forBarPosition:UIBarPositionAny
                                      barMetrics:UIBarMetricsDefault];

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

2
Ustawia to globalnie dla KAŻDEGO paska nawigacyjnego w bazie kodu ... przez większość czasu nie jest to, czego chcesz.
Christoph

97

Spróbuj tego:

[[UINavigationBar appearance] setBackgroundImage: [UIImage new]  
                                   forBarMetrics: UIBarMetricsDefault];

[UINavigationBar appearance].shadowImage = [UIImage new];

Poniższe zdjęcie ma wyjaśnienie (pasek nawigacji iOS7):

wprowadź opis zdjęcia tutaj

I sprawdź to SO: iOS7 - Zmień kolor ramki UINavigationBar


Jak powiedział Serhii, aby zaakceptować obraz cienia, należy ustawić niestandardowy obraz tła.
akashivskyy

3
zrób to w swoim AppDelegate.
myusuf3

Świetna odpowiedź ... Uratowałem mój dzień _ / \ _
Akshay,

@RPM działa świetnie w iOS 7,8,9,10. Ten sam kod dla paska nawigacji viewControlles w medium dla Swift.
Akhrameev,

64

Chciałem dodać szybką wersję odpowiedzi Serhii. Utworzyłem UIBarExtension.swiftz:

import Foundation
import UIKit

extension UINavigationBar {
    func hideBottomHairline() {
        self.hairlineImageView?.isHidden = true
    }

    func showBottomHairline() {
        self.hairlineImageView?.isHidden = false
    }
}

extension UIToolbar {
    func hideBottomHairline() {
        self.hairlineImageView?.isHidden = true
    }

    func showBottomHairline() {
        self.hairlineImageView?.isHidden = false
    }
}

extension UIView {
    fileprivate var hairlineImageView: UIImageView? {
        return hairlineImageView(in: self)
    }

    fileprivate func hairlineImageView(in view: UIView) -> UIImageView? {
        if let imageView = view as? UIImageView, imageView.bounds.height <= 1.0 {
            return imageView
        }

        for subview in view.subviews {
            if let imageView = self.hairlineImageView(in: subview) { return imageView }
        }

        return nil
    }
}

Dziękuję Ci! To powinna być odpowiedź.
PeiweiChen

Działa z paskiem nawigacji, ale nie działa z uitoolbar
TomSawyer

Uważam, że w iOS 12 to już nie działa. :(.
Chris Prince,

Działa świetnie iOS 13
ttorbik

To powinna być odpowiedź. działa jak urok w
iOS

63

Szybki sposób na zrobienie tego:

UINavigationBar.appearance().setBackgroundImage(
    UIImage(),
    forBarPosition: .Any,
    barMetrics: .Default)

UINavigationBar.appearance().shadowImage = UIImage()

2
Rzadko zdarza się, aby znaleźć się tak daleko na liście, zanim znajdzie się najbystrzejszą odpowiedź. +1!
sudo make install

3
Ukrywa całe tło UINavigationBar tho: /
user365314

Źle, ukrywa też całe tło!
TomSawyer

3
Uwaga: musisz ustawić wartość nawigacji w pasku nawigacyjnym na Przeźroczysty na false
dmathewwws

19

Proste rozwiązanie w mgnieniu oka

   let navigationBar = self.navigationController?.navigationBar
    navigationBar?.setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    navigationBar?.shadowImage = UIImage()

3
+1 Ze wszystkich odpowiedzi, to w końcu dla mnie zadziałało. Nie zepsuło paska stanu jak innych odpowiedzi i rozwiązuje problem zmiany tylko jednego paska kontrolera nawigacji, a nie wszystkich pasków nawigacji w projekcie.
JoeGalind

Wersja Swift 4.2: navigationBar? .SetBackgroundImage (UIImage (), dla: UIBarPosition.any, barMetrics: UIBarMetrics.default) navigationBar? .ShadowImage = UIImage ()
airowe

16

Po przestudiowaniu odpowiedzi od Serhila stworzyłem pasek UINavigationBar + Dodatek, który może z łatwością ukryć linię włosów.

#import "UINavigationBar+Addition.h"

- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationBar *navigationBar = self.navigationController.navigationBar;
    [navigationBar hideBottomHairline];
}

16

W Swift 3.0

Edytuj swój AppDelegate.swift, dodając następujący kod do funkcji aplikacji:

// Override point for customization after application launch.

// Remove border in navigationBar
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)

16

Począwszy od systemu iOS 13 istnieje systemowy interfejs API do ustawiania lub usuwania cienia

UIKit korzysta z właściwości shadowImage i shadowColor do określenia wyglądu cienia. Gdy shadowImage ma wartość zero, pasek wyświetla domyślny cień podbarwiony zgodnie z wartością we właściwości shadowColor. Jeśli shadowColor ma wartość zero lub zawiera kolor clearColor, pasek nie wyświetla cienia.

    let appearance = UINavigationBarAppearance()
    appearance.shadowImage = nil
    appearance.shadowColor = nil
    navigationController.navigationBar.standardAppearance = appearance

https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage


shadowImage i shadowColor nie są udokumentowane w UINavigationBarAppearancenagłówkach !! Nigdy tego nie znajdę. Dzięki, to rozwiązało moje problemy w 100%
Roger Oba,

1
Tak, działa również dobrze dla mnie w iOS 13, dziękuję bardzo @glotcha.
Yogesh Patel,

@glotcha Right ....
Digvijay

dzięki. jedyna rzecz, która mi
zadziałała

13

Może być również ukryty w Storyboard (działa na Xcode 10.1)

Dodając atrybut środowiska wykonawczego: hidesShadow - Boolean - True

wprowadź opis zdjęcia tutaj


11

Zaktualizowano rozwiązanie pxpgraphics dla Swift 2.0

extension UINavigationBar {

    func hideBottomHairline()
    {
        hairlineImageViewInNavigationBar(self)?.hidden = true
    }

    func showBottomHairline()
    {
        hairlineImageViewInNavigationBar(self)?.hidden = false
    }

    private func hairlineImageViewInNavigationBar(view: UIView) -> UIImageView?
    {
        if let imageView = view as? UIImageView where imageView.bounds.height <= 1
        {
            return imageView
        }

        for subview: UIView in view.subviews
        {
            if let imageView = hairlineImageViewInNavigationBar(subview)
            {
                return imageView
            }
        }

        return nil
    }

}

extension UIToolbar
{

    func hideHairline()
    {
        let navigationBarImageView = hairlineImageViewInToolbar(self)?.hidden = true
    }

    func showHairline()
    {
        let navigationBarImageView = hairlineImageViewInToolbar(self)?.hidden = false
    }

    private func hairlineImageViewInToolbar(view: UIView) -> UIImageView?
    {
        if let imageView = view as? UIImageView where imageView.bounds.height <= 1
        {
            return imageView
        }

        for subview: UIView in view.subviews
        {
            if let imageView = hairlineImageViewInToolbar(subview)
            {
                return imageView
            }
        }

        return nil
    }

}

Cześć, nowy na iOS i próbuję się uczyć. Jak korzystać z rozszerzenia? Mam plik kontrolera widoku i umieszczam w nim te rozszerzenia poza zakresem klasy. Ale jak mam wywołać hide / showHairline ()? Naprawdę nie rozumiem, jak używać rozszerzeń, ale jest on używany w tak wielu rozwiązaniach, ale po prostu nie rozumiem, jak są one zaimplementowane w rzeczywistym kodzie
Tommy K

Rozszerzenia dodają funkcjonalność do istniejących klas. Każda rozszerzona klasa, struktura, wyliczanie itp. Będzie miała te nowe funkcje dostępne zawsze, gdy będziesz ich potrzebować. Zobacz więcej tutaj: developer.apple.com/library/ios/documentation/Swift/Conceptual/…
tf.alves

hm, więc powinienem móc użyć, UINavigationController().navigationBar/toolbar.hide/showBottomHairline()a następnie nie? Próbuję tego, ale bezskutecznie. Czy nie rozumiem poprawnie?
Tommy K

11

Swift 4 // do ukrywania linii cienia paska nawigacji

navigationController?.navigationBar.shadowImage = UIImage()

10

Korzystam z rozszerzenia UINavigationBar, które pozwala mi ukryć / pokazać ten cień za pomocą interfejsu API UIAppearance lub wybrać pasek nawigacji, który ma ukryć / pokazać ten cień za pomocą Storyboard (lub kodu źródłowego). Oto rozszerzenie:

import UIKit

private var flatAssociatedObjectKey: UInt8 = 0

/*
  An extension that adds a "flat" field to UINavigationBar. This flag, when
  enabled, removes the shadow under the navigation bar.
 */
@IBDesignable extension UINavigationBar {
    @IBInspectable var flat: Bool {
        get {
            guard let obj = objc_getAssociatedObject(self, &flatAssociatedObjectKey) as? NSNumber else {
                return false
            }
            return obj.boolValue;
        }

        set {
            if (newValue) {
                let void = UIImage()
                setBackgroundImage(void, forBarPosition: .Any, barMetrics: .Default)
                shadowImage = void
            } else {
                setBackgroundImage(nil, forBarPosition: .Any, barMetrics: .Default)
                shadowImage = nil
            }
            objc_setAssociatedObject(self, &flatAssociatedObjectKey, NSNumber(bool: newValue),
                    objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

Teraz, aby wyłączyć cień na wszystkich paskach nawigacyjnych, musisz użyć:

UINavigationBar.appearance().flat = true

Lub możesz włączyć / wyłączyć to zachowanie za pomocą scenariuszy:

Storyboard paska nawigacji


@ NunoGonçalves, możesz myśleć o flatAssociatedObjectKeyunikatowej int (traktowanej jak wskaźnik), aby zidentyfikować powiązany obiekt. Tutaj jest zdefiniowany przez adres pamięci prywatnego var. Zaktualizowałem odpowiedź, aby dodać ten var. Zobacz nshipster.com/associated-objects aby uzyskać więcej informacji.
Alvivi,

Dobre rozwiązanie, ale działa tylko wtedy, gdy pasek nawigacyjny jest ustawiony translucentna false
ZYiOS

9

Swift 4 Testowane ROZWIĄZANIE W JEDNEJ LINII

W Viewdidload() Ustaw wartość domyślną użytkownika kontrolera nawigacji true dla klucza „hidesShadow”

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")

}

1
Działa idealnie !!
Prashant Tukadiya,

7

Swift to położył

UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default)
UINavigationBar.appearance().shadowImage = UIImage()

w

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool

I usuwa również kolor tła.
TomSawyer

7

Inna opcja, jeśli chcesz zachować przezroczystość i nie chcesz podklasować wszystkich UINavigationControlleraplikacji:

#import <objc/runtime.h>

@implementation UINavigationController (NoShadow)

+ (void)load {
    Method original = class_getInstanceMethod(self, @selector(viewWillAppear:));
    Method swizzled = class_getInstanceMethod(self, @selector(swizzled_viewWillAppear:));
    method_exchangeImplementations(original, swizzled);
}

+ (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
    if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
        return (UIImageView *)view;
    }

    for (UIView *subview in view.subviews) {
        UIImageView *imageView = [self findHairlineImageViewUnder:subview];
        if (imageView) {
            return imageView;
        }
    }

    return nil;
}

- (void)swizzled_viewWillAppear:(BOOL)animated {
    UIImageView *shadow = [UINavigationController findHairlineImageViewUnder:self.navigationBar];
    shadow.hidden = YES;

    [self swizzled_viewWillAppear:animated];
}

@end

6
Slightly Swift Solution 
func setGlobalAppearanceCharacteristics () {
    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.white
    navigationBarAppearace.barTintColor = UIColor.blue
    navigationBarAppearace.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    navigationBarAppearace.shadowImage = UIImage()

}

Dzięki James! Nie rozumiem, dlaczego ktoś głosował na twoją odpowiedź.
Dănuț Mihai Florian

jeśli jest to potrzebne, możesz również dodać: self.navigationController.navigationBar.translucent = false self.navigationController.navigationBar.clipsToBounds = false self.navigationController.navigationBar.shadowImage = UIImage () self.navigationController.navueColorBlueBarbar.navigationBar.bar ()
Alessandro Ornano,

5

Rozwiązanie w Swift 4.2:

private func removeHairlineFromNavbar() {
    UINavigationBar.appearance().setBackgroundImage(
        UIImage(),
        for: .any,
        barMetrics: .default)
    UINavigationBar.appearance().shadowImage = UIImage()
}

Po prostu umieść tę funkcję w pierwszym programie Viewcontroller i wywołaj ją viewdidload


4

W iOS8, jeśli ustawisz UINavigationBar.barStylena.Black można ustawić tło na pasku jako zwykły kolorze bez obramowania.

W Swift:

UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().barStyle = UIBarStyle.Black
UINavigationBar.appearance().barTintColor = UIColor.redColor()

To najczystsze rozwiązanie i najlepszy sposób na osiągnięcie tego. Jeśli nie musisz obsługiwać <iOS 8, nie ma powodu, aby nie używać tej odpowiedzi. Dzięki.
user3344977

Działa świetnie. Ustawiłem go również w scenorysie, więc nawet nie potrzebowałem żadnego kodu.
vikzilla

1
Dzięki temu uzyskasz bardzo małą białą linię zamiast standardowego cienia.
Vegard

4

Dwuliniowe rozwiązanie, które działa dla mnie. Spróbuj dodać to w metodzie ViewDidLoad:

navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
self.extendedLayoutIncludesOpaqueBars = true

tylko to zadziałało dla mnie
Usama bin Attique,

3

Oto bardzo proste rozwiązanie:

self.navigationController.navigationBar.clipsToBounds = YES;

37
Obszar paska stanu jest również obcinany.
Fury

3

Proste rozwiązanie - Swift 5

  1. Utwórz rozszerzenie:

    extension UIImage {
    
        class func hideNavBarLine(color: UIColor) -> UIImage? {
    
            let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
            UIGraphicsBeginImageContext(rect.size)
            let context = UIGraphicsGetCurrentContext()
            context?.setFillColor(color.cgColor)
            context?.fill(rect)
    
    
            let navBarLine = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return navBarLine
        }
    }
  2. Dodaj to do viewDidLoad():

    self.navigationController?.navigationBar.shadowImage = UIImage.hideNavBarLine(color: UIColor.clear)

2

Dla użytkowników iOS 9 to zadziałało dla mnie. po prostu dodaj to:

UINavigationBar.appearance().shadowImage = UIImage()

2

Problem z ustawieniem obrazu tła polega na tym, że usuwa on rozmycie. Możesz go usunąć bez ustawiania obrazu tła. Zobacz moją odpowiedź tutaj .


2

Powinieneś dodać widok na dole UISearchBar

let rect = searchController.searchBar.frame;
let lineView : UIView = UIView.init(frame: CGRect.init(x: 0, y: rect.size.height-1, width: rect.size.width, height: 1))
lineView.backgroundColor = UIColor.init(hexString: "8CC73E")
searchController.searchBar.addSubview(lineView)

Nie mogę uwierzyć, że to wciąż problem - po prostu znów się z tym spotkałem! Ale obecnie jest to najlepsze możliwe rozwiązanie; Dzięki @Socheat
RichAppz

1

Wiem, że to stary wątek, ale znalazłem rozwiązanie, które działa naprawdę dobrze:

Podklasa UINavigationBar. W podklasie UINavigationBar przesłonięcie didAddSubview przy użyciu następującego kodu:

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

    if ([subview isKindOfClass:[UIImageView class]]) {
        [subview setClipsToBounds:YES];
    }
}

1

Właśnie utworzyłem rozszerzenie dla tego ... Przepraszam za formatowanie (to moja pierwsza odpowiedź).

Stosowanie:

  override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.hideShadow = true
}

Rozbudowa:

 UINavigationController.swift
//  Created by Ricardo López Rey on 16/7/15.

import Foundation


struct UINavigationControllerExtension {
    static var hideShadowKey : String = "HideShadow"
static let backColor = UIColor(red: 247/255, green: 247/255, blue: 248/255, alpha: 1.0)
}

extension UINavigationController {

    var hideShadow : Bool {
        get {
            if let ret =  objc_getAssociatedObject(self, &UINavigationControllerExtension.hideShadowKey) as? Bool {
                return ret
            } else {
                return false
            }


        }
        set {
            objc_setAssociatedObject(self,&UINavigationControllerExtension.hideShadowKey,newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))

            if newValue {


            self.navigationBar.setBackgroundImage(solidImage(UINavigationControllerExtension.backColor), forBarMetrics: UIBarMetrics.Default)

                self.navigationBar.shadowImage = solidImage(UIColor.clearColor())
            } else {
                self.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
            }
        }
    }

    private func solidImage(color: UIColor, size: CGSize = CGSize(width: 1,height: 1)) -> UIImage {
        var rect = CGRectMake(0, 0, size.width, size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(rect)
        var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }


}

1

W AppDelegate globalnie zmieniło to format paska nawigacyjnego:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().barTintColor = UIColor.redColor()
    UINavigationBar.appearance().translucent = false
    UINavigationBar.appearance().clipsToBounds = false
    UINavigationBar.appearance().backgroundColor = UIColor.redColor()
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }

Nie udało mi się wdrożyć niczego innego na konkretnym VC, ale to pomoże 90% ludzi


1
-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    UIImage *emptyImage = [UIImage new];
    self.navigationController.navigationBar.shadowImage = emptyImage;
    [self.navigationController.navigationBar setBackgroundImage:emptyImage forBarMetrics:UIBarMetricsDefault];
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.