UINavigationBar Geri Gizle Düğme Metni


104

Geri Düğmesi Metnini bir UINavigation Controller'dan nasıl gizleyebilirim? Ben sadece "<" olacak, "<Geri" olmayacak


1
varsayılan metni değiştiremezsiniz, bunun yerine özel geri düğmesini ayarlamak için navigationItem.leftBarButtonItem'i deneyin
BaSha


Görünüm proxy'si kullanarak genel bir çözüm istiyorsanız aşağıdaki cevabıma bakın.
fl034

Yanıtlar:


107

Arayüz oluşturucuda , önceki denetleyicinin gezinme öğesini seçebilir ve Back Buttondizeyi geri düğmesinin görünmesini istediğiniz şekilde değiştirebilirsiniz . Örneğin boş olmasını istiyorsanız, sadece bir boşluk bırakın.

Bu kod satırıyla da değiştirebilirsiniz :

[self.navigationItem.backBarButtonItem setTitle:@"Title here"];

Veya Swift ile :

self.navigationItem.backBarButtonItem?.title = ""


2
Müthiş ipucu, arayüz oluşturucu üzerinde boş bir alanı ayarlama hakkında bir ... :-D
Felipe Ferri

9
Arabirim oluşturucu ve Swift programatik rotalar, XCode 8.3.2, Swift 3'te benim için çalışmadı
agrippa

Tüm geri düğmeleri uygulama aracılığıyla gizlemek için çok basit çözümüme göz atabilirsiniz. Not: Kendinize ait sıfır kod satırı gerektirir
Pratik Jamariya

2
Eğer Back ButtonIB zaten boştur, sadece binmek almak için bir boşluk eklemek Backve sadece ok göstermektedir.
Tejas K

3
Bu yöntem şu anda yalnızca arayüz oluşturucuda çalışmaktadır. Bunu koddan ayarlamak işe yaramaz, yalnızca başlığı ayarlamak yerine tüm backBarButtonItem'i şu şekilde ayarlamanız gerekir: navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary

81

Bunu film şeridi aracılığıyla da yapabilirsiniz. Önceki denetleyicinin gezinme öğesinin öznitelik denetçisinde , Geri düğmesi alanında "" ayarını yapabilirsiniz. Aşağıdaki resme bakın. "Başlığınızı burada" "" olarak değiştirin. Bunu yaparak istediğiniz sonucu elde edersiniz. Artık 'Başlık' ile uğraşmanıza gerek yok.

Programlı olarak kullanabilirsiniz

[self.navigationItem.backBarButtonItem setTitle:@" "];

nerede self , istediğiniz View kontrol cihazını iten kontrol cihazını ifade eder.

Xcode görünümü denetleyicisi gezinme öğesi

Gezinme çubuğundan Önce, Sonra Örnek

Önce Önce

Sonra Sonra


7
Bu, storyboard'larda ayarlanmışsa mükemmel çalışır. Gezinme çubuğunun ayarlanabilmesi için içinde bir gezinme öğesi olduğundan emin olun.

11
İOS 9 / Xcode 7.3'te, backBarButtonItemprogramlı olarak ayarlamak çalışmaz, ancak film şeridi aracılığıyla ayarlamak işe yarar.
Scott Gardner

@ScottGardner, iOS 9'da backBarButtonItemprogramlı olarak benim için çalışıyor .
Suragch

Ekranınızda gezinme çubuğunuz yoksa, belki de gizlenmesi gerektiğinden, film şeridindeki gezinme öğesini önceki görünüm denetleyicisine ekleyebilir ve geri düğmesini "" olarak ayarlayabilirsiniz.
Martin Berger

Çözüm harika çalıştı ve Xcode 9.2 / iOS 11'de uygulanması çok kolay.
Ray Hunter

79

Şu şekilde uygulayabilirsiniz UINavigationControllerDelegate:

Eski Swift

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
    viewController.navigationItem.backBarButtonItem = item
}

Swift 4.x

class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }
}

backBarButtonItemolduğu nilvarsayılan olarak ve sadece tüm denetleyicileri için ayarlayın böylece bir sonraki, kontrolör itti etkiler


6
Teşekkür ederim! Bu, 4 yinelenen soruya ve düzinelerce yanıta baktıktan sonra (başka hiçbir şeyi karıştırmadan) işe yarayan tek çözümdür.
inket

1
Zaten kendi temsilcisi haline getirdiğim bir gezinme denetleyicisi alt sınıfım vardı, bu mükemmel çalıştı. Yine de Swift 3 için güncellenmelidir.
Dean Kelly

Harika çözüm teşekkürler, benim için tutarlı bir şekilde çalışan tek kişi.
Elliott Davies

Büyüleyici görünüyor.
tounaobun

48

Geri düğmesinin başlığı çalışmıyor @""veya nilçalışmıyor. Tüm düğmeyi boş ayarlamanız gerekir (başlık veya resim olmadan):

Amaç-C

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];

Swift

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

Bu, gezinme yığınındaki görünüm denetleyicinizin üstündeki görünüm denetleyicisinde yapılmalıdır (yani pushViewControlleryöntem aracılığıyla sanal ortama gittiğiniz yerden )


2
teşekkür ederim işe yarıyor! Swift içinde: self.navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .Plain, target: nil, action: nil)
mostworld77

mükemmel cevap .. doğru bir şekilde, yalnızca varsayılan backBarButtonItem başlığını değiştirmenin yeterli olmayacağına işaret ediyor. BackBarButtonItem öğesinin önceki görünüm denetleyicisinde ayarlanması gerektiğini belirtmek için bonus puan.
Crazed'n'Dazed

30

Çok sayıda görüntü denetleyicisine sahip olduğunuz durumlar için bu soruna başka bir çözüm, aşağıdaki UIAppearancegibi geri düğmesi başlık metnini etkili bir şekilde gizlemek için bir proxy kullanmaktır :

UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

[navBarButtonAppearance setTitleTextAttributes:@{
    NSFontAttributeName:            [UIFont systemFontOfSize:0.1],
    NSForegroundColorAttributeName: [UIColor clearColor] }
                                      forState:UIControlStateNormal];

Bu çözüm, metni geri düğmesi başlığını manuel olarak @" " tüm gezinti çubuğu düğmelerini etkilemesi dışında .

Bunu soruna genel bir çözüm olarak önermiyorum çünkü tüm gezinti çubuğu düğmelerini etkiliyor. Başlıkları ne zaman gizlemek yerine düğme başlıklarının ne zaman gösterileceğini seçmeniz için paradigmayı ters çevirir .

Başlıkların ne zaman gösterileceğini seçmek için, başlık metni niteliklerini gerektiği gibi manuel olarak geri yükleyin veya UIBarButtonItemaynısını yapan özel bir alt sınıf oluşturun (potansiyel olarak başka birUIAppearance proxy ile).

Geri düğmesi başlıklarının çoğunun gizlenmesi gereken bir uygulamanız varsa ve gezinme düğmelerinin yalnızca birkaçı (veya hiçbiri) başlıklı sistem düğmeleriyse, bu sizin için olabilir!

(Not: Uzun başlıkların orta gezinme çubuğu başlığının kaymasına neden olmaması için metin rengi açık olsa bile yazı tipi boyutunun değiştirilmesi gerekir)


Uygulamam için en kolay çözüm buydu. Teşekkürler.
Trevor Panhorst

3
Bu aynı zamanda geri düğmesi olmayan bir sol çubuk düğmesi öğelerini de kapatmıyor mu?
kevinl

1
Evet, ben de not ettim. "tüm gezinti çubuğu düğmelerini etkiler"
Adam Kaplan

2
sol / sağ çubuk düğme öğeleri dahil gezinme çubuklarındaki diğer tüm düğmeleri etkilememeli mi?
Fyodor Volchyok

Evet, daha kapsamlı bir gereksinim belirtmedi.
Adam Kaplan

30

ViewDidLoad veya loadView'a aşağıdaki kodu ekleyin

self.navigationController.navigationBar.topItem.title = @"";  

İPhone ve iPad'de iOS 9 ile test ettim


20
Bu, önceki görünüm denetleyicisinin başlığını temizlemedi mi?
CalZone

6
Son ekran başlığını kaldıracağı için kullanmayın
evya

Bunu geçerli görünüm denetleyicisinden yapmanız gerekiyorsa, başlığı önceki vc'den kaldırmamak için şunu yapmanız gerekir: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, eylem: nil)
Leszek Szary

15

Bir gezinti denetleyicisi tarafından oluşturulan tüm "Geri" düğmelerinin metin içermemesi için bu Objective-C kategorisini ekleyebilirsiniz. Bunu AppDelegate.m dosyama ekledim.

@implementation UINavigationItem (Customization)

/**
 Removes text from all default back buttons so only the arrow or custom image shows up.
 */
-(UIBarButtonItem *)backBarButtonItem
{
    return [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}

@end

Not - (Bu uzantıyı Swift ile nasıl çalıştıracağımı bilmiyorum, tuhaf hatalar oluyordu. Düzenlemeler bir Swift sürümü eklemeye hoş geldiniz)


Bu, "Geri" başlığını verir, başlığı gizlemez
Raj Aggrawal

Gerçekten, overridehızlı bir şekilde nasıl yapılır . Çok ilginç soru
Andrey Gagan

@teradyl en iyi cevaptır.
aks.knit1108

@Andrey Gagan, cevabımı gör
Abirami Bala,

Bu, iOS 9.0 - 10.3.3'te çalışır, ancak iOS 11+ üzerinde çalışmaz.
Sihad Begovic

14

Yukarıda ve aşağıda bazılarını denedim ama işe yaramadı. Bu benim için çalıştı:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.topItem?.title = ""
}

1
Bunu geçerli görünüm denetleyicisinden yapmanız gerekiyorsa, başlığı önceki vc'den kaldırmamak için şunu yapmanız gerekir: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, eylem: nil)
Leszek Szary

11

Hiçbir yan etki olmadan çalışan tek şey, özel bir geri düğmesi oluşturmaktır. Özel bir eylem sağlamadığınız sürece, slayt hareketi bile çalışır.

extension UIViewController {
func setupBackButton() {
    let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    navigationItem.backBarButtonItem = customBackButton
}}

Maalesef, içindeki tüm geri düğmelerinin herhangi bir başlığa sahip olmamasını istiyorsanız, bu özel geri düğmesini tüm görünüm denetleyicilerinizde ayarlamanız gerekir: /

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

Başlık olarak boş dize değil bir boşluk belirlemeniz çok önemlidir.


9

Metni arka düğmeden programlı olarak kaldırmak için, Kodun altında kullanıldığında bu, xcode7 ve üzerinde çalışacaktır.

self.navigationController.navigationBar.topItem.title = @ "";

veya

manuel: Görsel senaryo taslaklarında, görünüm denetleyicisindeki gezinme çubuğunu seçin ve geri düğmesi metnine "" koyun.

bu çalışacak. Teşekkürler


2
Bu, navigationItem başlığını da kaldıracak
İlker Baltacı

Cevabınızı buna self.navigationController?.navigationBar.topItem?.title = " "Xcode 9'da düzenledim ve çalıştı!
MHSFisher

Bunu geçerli görünüm denetleyicisinden yapmanız gerekiyorsa, başlığı önceki vc'den kaldırmamak için şunu yapmanız gerekir: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, eylem: nil)
Leszek Szary

8

Mevcut cevap işe yaramadı. Başlığı kaldırmak istedim tamamen , ancak "geri" metni kaybolmuyordu.

Önceki görünüm denetleyicisine geri dönün ve title özelliğini ayarlayın:

self.title = @" ";

YALNIZCA önceki Görünüm Denetleyicisinin bir başlığı olmadığında çalışır


@ZevEisenberg, özelliğin View Controller'ın yaşam döngüsünde görüntülenmeden önce ayarlandığından emin olun. Yani, bunu viewDidLoad veya viewWillAppear yöntemlerinde ayarlayın.
ChrisHaze

1
ayrıca, tırnak işaretleri arasına boşluk bıraktığınızdan emin olun .
ChrisHaze

1
Aslında benim için boşluksuz çalışmaya başladı ; Sadece iyi eski boş dize: @"".
Zev Eisenberg

1
@ZevEisenberg, Çözümü ilk bulduğumda Xcode 5'te daha önceydi. Boşluk ile çalışmasının tek yolu buydu, bu yüzden onu örnek koda dahil ettim. Xcode 6 güncellemesi bunu içermelidir. Bilmekte
fayda var

Ayrıca hala çalışan yaklaşımımı kullandım ve aslında standart geri okunu da kaldırdım.
ChrisHaze

5

Alternatif yol - özel NavigationBar sınıfını kullanın.

class NavigationBar: UINavigationBar {

    var hideBackItem = true
    private let emptyTitle = ""

    override func layoutSubviews() {
        if let `topItem` = topItem,
            topItem.backBarButtonItem?.title != emptyTitle,
            hideBackItem {
            topItem.backBarButtonItem = UIBarButtonItem(title: emptyTitle, style: .plain, target: nil, action: nil)
        }

        super.layoutSubviews()
    }

}

Yani, bu tüm projenin başlıklarını geri alır. Sadece UINavigationController için özel sınıf ayarlayın.


4

Önceki VC'nin Başlığını boşluk içeren "" dizesine ayarlayın. ve geri düğmesi olan başlık, tek boşluklu dizeyle değiştirilecektir.

Self.title = " "

Geri'de düğmesine tekrar basın, başlığı görünümdeki orijinal başlığa sıfırlayın.


4

NavigationControllerGeçersiz kılan bir özel kullanınpushViewController

class NavigationController: UINavigationController {  
  override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    viewController.navigationItem.backBarButtonItem =
      UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    super.pushViewController(viewController, animated: animated)
  }
}

4

Şimdiden bir çok cevap, işte konuyla ilgili iki sentim. Bu yaklaşımı gerçekten sağlam buldum. Bunu segmentten önce viewController'a koymanız yeterlidir.

Swift 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

2
Evet! Teşekkürler :)
Hews

3

Bu yazıdaki her şeyi denedim. Tek çalışan çözüm @ VoidLess's

İşte aynı cevap ama daha eksiksiz

class CustomNavigationController: UINavigationController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.delegate = self
    }
}


// MARK:UINavigationControllerDelegate
extension CustomNavigationController {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    }
}

3

Bu benim iOS11 için çözümüm, applicationDidFinishLaunchingWithOptions içindeki UIBarButtonItem görünümünü değiştiriyorum:

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-100, 0), for:UIBarMetrics.default)

Y ofsetini değiştiremezsiniz çünkü bu, iOS11'de de arka çubuk düğmesinin konumunu değiştirecektir, ancak iOS10 ve altı için sorun değil.


1
Çalışır ancak animasyon sırasında önceki başlığı sola doğru hareket ettirebilirsiniz. Biraz bozuk görünüyor.
Jonathan

2

Swift3'te,

Global ayarı belirlerseniz

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // ..

    let BarButtonItemAppearance = UIBarButtonItem.appearance()
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)


    // ...

}

1
Bunun, yalnızca geri düğmelerinin değil, uygulamanızda bir yerde bulunabilecek diğer tüm çubuk düğmelerinin rengini de şeffaf hale getireceğini unutmayın.
Leszek Szary

2

Swift 3.1 Bunu, UINavigationController'ın temsilci yöntemini uygulayarak yapabilirsiniz.

func navigationController(_ navigationController: UINavigationController, 
                          willShow viewController: UIViewController, animated: Bool) {

    /** It'll hide the Title with back button only,
     ** we'll still get the back arrow image and default functionality.
     */
    let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                               action: nil)
    viewController.navigationItem.backBarButtonItem = item
}

En iyi cevap!
evya

2

Global olarak geri düğmesi başlığını gizlemek isteyenler için.

Sen swizzle edebilirsiniz viewDidLoadait UIViewControllerböyle.

+ (void)overrideBackButtonTitle {

    NSError *error;

    // I use `Aspects` for easier swizzling.

    [UIViewController aspect_hookSelector:@selector(viewDidLoad)
                              withOptions:AspectPositionBefore
                               usingBlock:^(id<AspectInfo> aspectInfo)
    {

        UIViewController *vc = (UIViewController *)aspectInfo.instance;

        // Check whether this class is my app's view controller or not.
        // We don't want to override this for Apple's view controllers,
        // or view controllers from external framework.

        NSString *className = NSStringFromClass([vc class]);
        Class class = [NSBundle.mainBundle classNamed:className];
        if (!class) {
           return;
        }

        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
        vc.navigationItem.backBarButtonItem = backButton;

    } error:&error];

    if (error) {
        NSLog(@"%s error: %@", __FUNCTION__, error.localizedDescription);
    }

}

Kullanım:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[self class] overrideBackButtonTitle];
    return YES;
}

2

İOS 13 ve sonraki bir sürümü hedefliyorsanız , bu yeni API'yi geri düğmesi başlığını genel olarak gizlemek için kullanabilirsiniz .

let backButtonAppearance = UIBarButtonItemAppearance()
backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]

UINavigationBar.appearance().standardAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().compactAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().scrollEdgeAppearance.backButtonAppearance = backButtonAppearance

1
Bu optimal değildir. Bir kullanıcı, açık metin içeren etikete dokunursa, geri eylem yine de tetiklenir.
dvdblk

1

Bununla mücadele ediyordum çünkü özel bir gezinme denetleyicim vardı. Özel gezinti denetleyicisi sınıfımdaki bu kodla tüm görünüm denetleyicilerindeki arka öğe metnini kaldırabildim override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

Bu, bu özel gezinme denetleyicisini kullanarak tüm arka öğe başlıklarını kaldırır.


1
Bunun için güncelleme: bu işe yarıyor ancak yüklemede beni rahatsız eden tuhaf bir gecikme var. Şimdi bunu 'BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor: UIColor.clear] için: .normal) için ekledim ve App delegate didLaunch mükemmel çalışıyor!
Amy.R

0

İOS 11'de, UIBarButtonItemgörünümün metin yazı tipini / rengini çok küçük bir değere veya net bir renge ayarlamanın, diğer çubuk öğelerinin kaybolmasına neden olacağını gördük (sistem artık UIBarButton öğesinin sınıfını onurlandırmıyor, onu bir_UIModernBarButton ). Ayrıca, arka metnin ofsetini ekran dışına ayarlamak, etkileşimli pop sırasında flaşla sonuçlanacaktır.

Biz de şaşkına döndük addSubView:

+ (void)load {
    if (@available(iOS 11, *)) {
        [NSClassFromString(@"_UIBackButtonContainerView")     jr_swizzleMethod:@selector(addSubview:) withMethod:@selector(MyiOS11BackButtonNoTextTrick_addSubview:) error:nil];
    }
}

- (void)MyiOS11BackButtonNoTextTrick_addSubview:(UIView *)view {
    view.alpha = 0;
    if ([view isKindOfClass:[UIButton class]]) {
        UIButton *button = (id)view;
        [button setTitle:@" " forState:UIControlStateNormal];
    }
    [self MyiOS11BackButtonNoTextTrick_addSubview:view];
}

0
-(void)setNavigationItems{
     UIBarButtonItem *leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"**Your title here**" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonClicked)];   
     self.navigationController.navigationBar.topItem.backBarButtonItem=leftBarButtonItem;
}
-(void)backButtonClicked{
    [self.navigationController popViewControllerAnimated:YES];
}

0

Arka metin, son Görüntü Denetleyicisinden navigationItem.title, gelir ve navigationItem.titleotomatik olarak ayarlanır self.title. Sorunu çözmenin bu kadar kolay yolu kancadır setTitle:, emin olunnavigationItem.title = @""

Bu kodu yerine koy AppDelegate.m, onu tamamlayacak。

    [UIViewController aspect_hookSelector:@selector(setTitle:)
                              withOptions:AspectPositionAfter
                               usingBlock:^(id<AspectInfo> aspectInfo, NSString *title) {
        UIViewController *vc = aspectInfo.instance;
        vc.navigationItem.titleView = ({
            UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
            titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
            titleLabel.text = title;
            titleLabel;
        });
        vc.navigationItem.title = @"";
    } error:NULL];

Daha fazla ayrıntı https://www.jianshu.com/p/071bc50f1475(Simple Chinease)adresinde


0

Çözümüm: - XCode: 10.2.1 - Swift: 5

  • Üst görüntü denetleyicisi:
    • self.title = ""
  • Çocuk görüntü denetleyicisi:
    • self.navigationItem.title = "Başlığınız" // görünüm denetleyicisinin başlığını ayarlamak için

0

XCode 11.5 Swift 5

Özel geri düğmesine ihtiyacınız yoksa bunu programlı olarak yapmanın çok basit - belki de biraz hilekar - yolu, yığına ittiğiniz görünüm denetleyicisinde yazı tipi boyutunu sıfıra eşitlemektir ve böyle bir şey çağırmaktır. viewDidLoad

private func setupNavBar() {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithDefaultBackground()
    
    let backButtonAppearance = UIBarButtonItemAppearance()
    backButtonAppearance.normal.titleTextAttributes = [.font: UIFont(name: "Arial", size: 0)!]
    appearance.backButtonAppearance = backButtonAppearance

    navigationItem.standardAppearance = appearance
    navigationItem.scrollEdgeAppearance = appearance
    navigationItem.compactAppearance = appearance
}

-1

Sonunda, tüm uygulamada varsayılan arka metni gizlemek için mükemmel bir çözüm buldu.

Sadece bir şeffaf Görüntü ekleyin ve AppDelegate'inize aşağıdaki kodu ekleyin.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)

-2

Aşağıdaki yöntem iOS 11'de çalışır ve diğer iOS sürümlerinde kilitlenmemesi güvenlidir. Bunu yapmak, hem UIModernBarButton hem de UIBackButtonContainerView özel API'ler olduğundan uygulamanızın App Store incelemesinde reddedilmesine neden olabilir. AppDelegate'e yerleştirin.

    if
        let UIModernBarButton = NSClassFromString("_UIModernBarButton") as? UIButton.Type,
        let UIBackButtonContainerView = NSClassFromString("_UIBackButtonContainerView") as? UIView.Type {

        let backButton = UIModernBarButton.appearance(whenContainedInInstancesOf: [UIBackButtonContainerView.self])
        backButton.setTitleColor(.clear, for: .normal)
    }

Bunu yapmak, hem UIModernBarButton hem de UIBackButtonContainerView özel API'ler olduğundan uygulamanızın App Store incelemesinde reddedilmesine neden olabilir.
Groot

Teşekkürler @Groot, uyarınızı ekledi.
Patrick

-5

Swift versiyonu, global olarak mükemmel çalışıyor:

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

        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

        return true
    }

7
Bunun, geri dönmeyen tüm metni rightBarButtons ve leftBarButtons da gizleyeceğini eklemelisiniz.
limfinity

bu a değil solution. @Limfinity'nin işaret ettiği gibi, uygulama boyunca tüm UIBarButtonItem'ler için evrensel olarak değiştirecek
Danut Pralea

@limfinity ve Danut Pralea'ya katılıyorum, uygulama boyunca tüm UIBarButtonItem metnini gizleyecek
Pratik Jamariya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.