Menghapus teks judul iOS UIBarButtonItem


198

Yang ingin saya lakukan adalah menghapus teks dari tombol 'Kembali' a UIBarButtonItem, hanya menyisakan chevron biru pada bilah navigasi. Ingatlah bahwa saya sedang mengembangkan untuk iOS 7. Saya sudah mencoba beberapa metode, termasuk, tetapi tidak terbatas pada:

Ini adalah metode gambar yang tidak saya sukai (gambar tampak tidak pada tempatnya):

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

Metode lain yang saya coba adalah ini, yang tidak berhasil (tidak ada yang ditampilkan):

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title=@"";
self.navigationItem.leftBarButtonItem=barBtn;

Yang ingin saya capai adalah sesuatu seperti tombol kembali yang ditemukan di aplikasi iOS 7 Music, yang hanya menampilkan chevron tunggal.

Terima kasih.



Mengapa Anda tidak mengambil gambar apa kebutuhan Anda? Dan merujuknya di leftBarButtonItem.
Vishal Sharma

Alasan mengapa saya tidak menggunakan metode gambar adalah 1. Sangat sulit untuk mendapatkan gambar yang sempurna dari tombol kembali dan 2. Akan ada beberapa bentuk ketidaksejajaran dengan gambar dan itu tidak terlihat alami, dan itu sebabnya Saya mengambil ke StackOverflow untuk bantuan tentang cara menyelesaikan ini secara asli.
Pan Ziyue

Jawaban:


198
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                         forBarMetrics:UIBarMetricsDefault];

Kemudian Anda dapat menghapus judul item tombol kembali.

Jika Anda menggunakan Storyboard, Anda dapat mengatur inspektur atribut navigasi Tombol Kembali dengan spasi.


95
Ada masalah dengan judul besar: mereka tidak terpusat tetapi didorong ke kanan, seperti jika teks tombol kembali masih ada
sonxurxo

11
Ini tidak berfungsi jika pengguna telah mengaktifkan "Aksesibilitas - Bentuk tombol"
Mikael Bartlett

22
Saya pikir ini adalah jawaban yang lebih baik:[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal];
benjamin

19
Solusi apa pun dengan angka ajaib di dalamnya adalah ide yang buruk. Dengan push to autolayout, kelas ukuran, fitur aksesibilitas, dll. Menggunakan nilai konstan seperti ini pasti akan menggigit Anda.
Michael Peterson

3
Untuk meningkatkan komentar Benjamin, Anda harus mengatur ini UIControlStateHighlightedjuga
n_b

411

Untuk mengatur judul tombol kembali untuk pengontrol tampilan tanpa mengubah judulnya gunakan:

Tujuan-C:

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

Cepat:

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

Agar jelas, ini dilakukan pada pengontrol tampilan yang akan Anda lihat jika Anda menekan tombol kembali. yaitu alih-alih melihat '<Pengaturan' Anda hanya ingin melihat '<' lalu pada SettingsViewController Anda, Anda akan memasukkan ini ke dalam init. Maka Anda tidak mendapatkan salah satu masalah dari judul tidak ditampilkan ketika Anda melihat controller tampilan itu sendiri.


1
Saya tidak tahu mengapa jawaban yang lain ditandai sebagai benar, itu hanya menghapus judul sehingga tombol kembali doent memiliki "judul" untuk ditampilkan, tetapi itu bukan pendekatan yang benar sama sekali! Yang ini harus menjadi jawaban yang tepat.
Pach

8
Juga bagi siapa saja yang menggunakan Swift, itu adalah navigationItem.backBarButtonItem = UIBarButtonItem (judul: "", style: .Plain, target: nil, action: nil). Tidak sulit untuk mengkonversi dari Obj-C ke Swift, tapi saya akan menyelamatkan Anda dari masalah
Zoyt

15
@BenjaminPiette Anda memanggil ini pada UIViewController yang akan Anda lihat jika Anda menekan tombol kembali? Bukan UIViewController yang menampilkan tombol kembali.
DonnaLea

2
Solusi yang elegan! Terima kasih. Rasanya tidak benar melakukan hal offset.
hyd00

2
solusi ini berfungsi sempurna jika Anda menulis baris kode ini pada pengontrol sebelumnya di tumpukan navigasi.
Bohdan Savych

128

Jika Anda menggunakan Storyboard, Anda dapat pergi ke Attributes InspectorViewController's Navigation Item(klik pada Navigation Bar) dan mengatur Back Buttonproperti ke "" (satu karakter spasi). Ini akan mengatur judul Tombol Kembali ke satu karakter spasi, membiarkan chevron terlihat. Tidak perlu dipusingkan dengan kode.

contoh gambar

Perhatikan bahwa ini akan menetapkan Back Buttonjudul untuk Tombol Kembali yang akan dipisahkan ke View Controller ini dari yang didorong di atasnya, bukan untuk Back Buttonyang akan ditampilkan di dalam Controller ini!


10
Saya berharap saya dapat lebih meningkatkan ini: "Perhatikan bahwa ini akan menetapkan judul Tombol Kembali untuk Tombol Kembali yang akan disegmentasi ke View Controller ini dari yang didorong di atasnya, bukan untuk Tombol Kembali yang akan ditampilkan di dalam ini Pengendali! "
Jayson Lane

121

Ini berfungsi bagi saya untuk menampilkan chevron 'belakang' tanpa teks:

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

Tetapkan properti ini di viewDidLoadView Controller yang menyajikan bilah navigasi dan itu akan membantu.

Catatan: Saya hanya mengujinya di iOS 7, yang masih dalam cakupan pertanyaan.


33
Itu memiliki efek samping menghapus label judul di tengah bar navigasi.
Pwner

7
Setel judul VC yang mendorong pada 'viewWillAppear' dengan properti yang sama. Dengan cara ini tidak dihapus.
Guto Araujo

5
Saya memindahkan potongan kode itu ke -viewDidLoadVC yang saya tidak ingin teks Kembali. Namun, apa yang saya temukan kemudian adalah ketika saya mengeluarkan VC ke-2 dari navigationControllerteks Judul muncul segera setelahnya, tidak langsung. Saya kira video akan menggambarkan ini lebih baik jadi ini dia: link
Pan Ziyue

1
Ini bukan jawaban terbaik, silakan merujuk ke jawaban andyleehao: [[Penampilan UIBarButtonItem] setBackButtonTitlePositionAdjustment: UIOffsetMake (0, -60) untukBarMetrics: UIBarMetricsDefault];
lmnbeyond

1
Ini adalah jawaban yang benar sesuai dengan dokumentasi Apple: "Ketika penerima berada di tumpukan item navigasi dan berada di urutan kedua dari atas — dengan kata lain, pengontrol tampilan mengelola pandangan yang akan ditelusuri oleh pengguna — nilai di properti ini digunakan untuk tombol kembali pada bilah navigasi paling atas. Jika nilai properti ini nol, sistem menggunakan string "Kembali" sebagai teks dari tombol kembali. "
Raphael Oliveira

27

Saat Anda mengatur judul tombol, gunakan @ "" bukan @ "".

--EDIT--

Apakah ada yang berubah ketika Anda mencoba string lain? Saya sendiri berhasil menggunakan kode berikut:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

backString adalah variabel yang diatur ke @ "" atau @ "Kembali", tergantung pada apakah saya menggunakan iOS 7 atau versi yang lebih rendah.

Satu hal yang perlu diperhatikan adalah kode ini tidak ada di controller untuk halaman yang ingin saya sesuaikan dengan tombol kembali. Ini sebenarnya di controller sebelum di tumpukan navigasi.


Hmm, iOS 7 sepertinya tidak mengubahnya. Itu terus menggunakan "Kembali" sebagai judul. Jika saya menempatkan setLeftBarButtonItem:backButtonbukan apa-apa akan ada di sana.
Pan Ziyue

1
Jika itu masalahnya, dan tidak ada yang terjadi ketika Anda mengatur judul ke sesuatu yang lain, saya pikir Anda harus mencoba memindahkan kode Anda ke controller tampilan induk. Saya menggunakan kode yang saya posting di atas dalam metode prepForSegue saya.
Kamaros

27

masukkan deskripsi gambar di sini

Terkadang sangat membantu untuk melihat hal-hal dalam konteks. Berikut adalah proyek minimal yang menyembunyikan teks "kembali" tetapi masih menunjukkan panah.

Storyboard

masukkan deskripsi gambar di sini

Ada segue acara dari tombol "Tampilkan Pengendali Tampilan Kedua" ke pengontrol tampilan kedua.

Saya juga menambahkan Item Navigasi ke pengontrol tampilan kedua sehingga akan memiliki judul. Ini opsional. Itu tidak mempengaruhi tombol kembali.

Kode

FirstViewController.swift

import UIKit
class FirstViewController: UIViewController {

    @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {

        // hide the back button text
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {
    // Nothing at all needed here
}

Metode alternatif (khusus IB, tanpa kode)

Pada storyboard pilih item navigasi untuk pengontrol tampilan pertama (bukan yang kedua). Cukup masukkan spasi untuk teks Tombol Kembali.

masukkan deskripsi gambar di sini


Konsep kunci yang "untuk pengendali tampilan pertama (bukan yang kedua)" seperti nama VC yang ingin Anda kembalikan sehingga bertanggung jawab untuk memberikan judul ini.
buguibu

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

1
Anda dapat menggunakan backItem alih-alih topItem. TopItem akan menyembunyikan judul, sedangkan backItem akan menyembunyikan judul tombol kembali.
Ravi Ojha

2
Ini adalah satu-satunya solusi jika childViewController berada di kedalaman 2+ di tumpukan anak Navigator
Nathaniel Blumer

2
Ini juga akan menghapus judul controller tampilan sebelumnya. Dalam kebanyakan kasus, ini akan payah
CalZone

11

Di iOS7, Apple memperkenalkan dua properti baru ke UINavigationBar, 'backIndicatorTransitionMaskImage' dan 'backIndicatorImage'.

Dengan hanya menelepon sekali:

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

Ini akan membuat gambar khusus alih-alih mesin terbang chevron default, mewarisi warna warna keyWindow.

Dan untuk menghapus judul, saya akan menyarankan jawaban Kamaros. Ingatlah untuk memanggil kode ini pada pengontrol tampilan yang mendorong pengontrol tampilan baru Anda. Menghapus teks judul iOS UIBarButtonItem


Untuk menyesuaikan warna warna [[UINavigationBar appearance] setTintColor: [UIColor whiteColor]];
Mazen Kasser

10

Saya tidak memiliki banyak keberhasilan dengan jawaban yang diberikan tetapi saya menemukan pekerjaan yang sangat sederhana. Di storyboard Anda, Anda dapat mengklik Item Navigasi UIViewController's Anda dan mengatur teks tombol kembali. Saya mengaturnya ke satu ruang '' dan itu memberi saya perilaku yang saya cari.masukkan deskripsi gambar di sini


10

Ini bekerja untuk saya di iOS10. Sebut ini dari viewDidLoad dari view controller.

self.navigationController?.navigationBar.topItem?.title = ""

6

Solusi sederhana untuk masalah ini, bekerja pada iOS7 dan juga 6, adalah dengan mengatur tampilan judul khusus di viewDidLoad:

- (void)viewDidLoad {

    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = self.title;
    titleLabel.backgroundColor = [UIColor clearColor];

    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;
}

Kemudian, di viewWillAppear: Anda dapat memanggil dengan aman

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

Karena tampilan judul Anda adalah tampilan khusus, itu tidak akan ditimpa ketika kembali ke tumpukan navigasi.


Saya hanya membutuhkan bagian terakhir dari kode dan bukan UILabel kosong. Saya menelepon[self.navigationItem.backBarButtonItem setTitle:@" "]; di viewWillAppear tetapi tidak berfungsi pada tampilan yang disajikan setelah menolak tampilan modal.
Diziet

6

Sebenarnya Anda bisa melakukan ini hanya dengan satu trik:

Timpa UINavigationBarkelas dan tambahkan baris kode ini:

- (void)layoutSubviews{
    self.backItem.title = @"";
    [super layoutSubviews];
}

Kemudian inisialisasi Anda UINavigationControllerdengan kelas UINavigationBar khusus ini dll.UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

Semoga ini membantu


Ini berhasil untuk saya. Meskipun sepertinya ada sedikit gagap dalam animasi push di iOS 7: judulnya tampaknya memberi ruang untuk tombol kembali kemudian berpusat karena tidak ada.
zekel

Ya, coba gunakan custom titleView alih-alih mengatur navigasiItem.title secara langsung. Saya pikir itu harus memperbaiki masalah Anda.
rordulu

solusi ini luar biasa karena secara global untuk setiap navigasiBar yang memiliki sub-kelas. Terima kasih
Yetispapa

5

Saya bisa menggagalkan sesuatu bersama menggunakan jawaban DonnaLea. Ini adalah bagaimana solusinya muncul di subkelas UIViewController saya:

var backItemTitle:String?

override func viewDidLoad() {
    super.viewDidLoad()

    //store the original title
    backItemTitle = self.navigationController?.navigationBar.topItem?.title

    //remove the title for the back button
    navigationController?.navigationBar.topItem?.title = ""
}

override func willMoveToParentViewController(parent: UIViewController?) {
    super.willMoveToParentViewController(parent)
    if parent == nil {

        //restore the orignal title
        navigationController?.navigationBar.backItem?.title = backItemTitle
    }
}

Masalah dengan jawaban asli adalah bahwa ia menghilangkan judul dari controller ketika Anda kembali ke sana. Mencoba untuk mereset judul di viewWillDisappear sudah terlambat dalam proses transisi; Itu menyebabkan judul untuk kembali masuk bukannya animasi dengan baik. Namun willMoveToParentViewController terjadi lebih cepat dan memungkinkan untuk perilaku yang benar.

Peringatan: Saya hanya menguji ini dengan push / pop UINavigationController normal. Mungkin ada perilaku tak terduga tambahan dalam situasi lain.


4

Dalam metode prepForSegue: pada ViewController pertama Anda, Anda menetapkan judul view ke @ "", jadi ketika tampilan berikutnya didorong, ia akan menampilkan judul ViewController sebelumnya yang akan menjadi @ "".

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    self.navigationItem.title = @" ";
}

Satu-satunya masalah dengan ini adalah ketika Anda menekan tombol kembali tampilan sebelumnya Anda tidak akan memiliki judul, jadi Anda dapat menambahkannya lagi di viewWillAppear:

- (void)viewWillAppear:(BOOL)animated{
    self.navigationItem.title = @"First View Title";
}

Saya tidak terlalu menyukai solusi ini tetapi ini berhasil dan saya tidak menemukan cara lain untuk melakukannya.



3

Tidak ada jawaban yang membantu saya. Tapi sebuah trik berhasil - Saya baru saja membersihkan judul view controller yang mendorong (di mana tombol kembali akan) sebelum mendorongnya.

Jadi ketika tampilan sebelumnya tidak memiliki judul, di iOS 7 tombol kembali hanya akan memiliki panah, tanpa teks.

Pada viewWillAppearpandangan yang mendorong, saya menempatkan kembali judul aslinya.


1
Hmm, trik ini berhasil. Namun sepertinya kata-kata di atas sana akan berkedip kadang-kadang. Bukan solusi yang sangat baik tetapi tetap bagus. +1
Pan Ziyue

3
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

Saya mengalami masalah yang sama dan saya melakukannya dengan cara ini.

--EDIT--

ini adalah solusi ketika Anda benar-benar ingin menghapus teks judul dari semua UIBbugtonItem. Jika Anda hanya ingin menghapus judul item tombol bilah belakang, tidak ada satu solusi mudah yang mudah. Dalam kasus saya, karena saya hanya memiliki sedikit UIBarButtonItems yang perlu menampilkan teks judul, saya hanya mengubah titleTextAttributes tombol tertentu. Jika Anda ingin lebih spesifik menggunakan kode di bawah ini, yang hanya akan mengubah tombol bilah navigasi:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

1
Ini bekerja untuk saya, namun Anda dapat melihat teks secara singkat ketika membalas.
Diziet

3
@Diziet coba tambahkan sama untuk Negara UIControlStateHighlightedjuga
CoderPug

2
Ini berfungsi dengan baik, tetapi ini juga "menyembunyikan" semua tombol lain, tidak hanya Tombol Kembali ... Ada ide untuk menyelesaikan ini?
Urkman

3

Ini menggunakan subclass navigationControllermenghapus "Kembali".

Saya menggunakan ini untuk menghapusnya, secara permanen melalui aplikasi.

//.h
@interface OPCustomNavigationController : UINavigationController 

@end

//.m
@implementation OPCustomNavigationController

- (void)awakeFromNib
{
    [self backButtonUIOverride:YES];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [self backButtonUIOverride:NO];

    [super pushViewController:viewController animated:animated];
}

- (void)backButtonUIOverride:(BOOL)isRoot
{
    if (!self.viewControllers.count)
        return;

    UIViewController *viewController;

    if (isRoot)
    {
        viewController = self.viewControllers.firstObject;
    }
    else
    {
        int previousIndex = self.viewControllers.count - 1;

        viewController = [self.viewControllers objectAtIndex:previousIndex];
    }

    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                                       style:UIBarButtonItemStylePlain
                                                                                      target:nil
                                                                                      action:nil];
}

@end

3
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                               NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                    forState:UIControlStateNormal];

1
Tolong, tambahkan penjelasan untuk jawaban Anda.
Alex

1 membuat warna yang sama dengan bilah navigasi 2 membuat ukuran teks cukup kecil untuk tidak memeras judul
Bill Xie

Saya meninjau jawaban Anda, Anda harus selalu mendukung jawaban Anda.
Alex

2

Sembunyikan Tombol Kembali Judul Bar Navigasi

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

2

Inilah yang saya lakukan saya, yang lebih sederhana untuk menghapus judul tombol kembali

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar?.backItem?.title = ""
}

2

Swift 3.1 Anda dapat melakukan ini dengan menerapkan metode delegasi dari UINavigationController. Ini akan menyembunyikan Judul hanya dengan tombol kembali, kita masih akan mendapatkan gambar panah kembali dan fungsi default.

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

1

Anda juga dapat menggunakan ini:

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;

[temporaryBarButtonItem release];

Ini bekerja untuk saya


1
case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }

1

Solusi sempurna secara global

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
}

solusi paling jelek dari semua ... juga menggunakan ruang seperti sebelumnya ... hanya menjadi transparan ...
Laszlo

Ini menghapus teks dari semua UIBarButtonItems aplikasi
Mikel Sanchez

1

Saya membuat kelas khusus untuk UINavigationControllerdan menerapkannya ke semua pengontrol navigasi di aplikasi saya. Di dalam UINavigationControllerkelas khusus ini saya mengatur UINavigationBardelegasi menjadi selfbegitu tampilan dimuat.

- (void)viewDidLoad {
    self.navigationBar.delegate = self;
}

Kemudian saya menerapkan metode delegasi:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {

    // This will clear the title of the previous view controller
    // so the back button is always just a back chevron without a title
    if (self.viewControllers.count > 1) {
        UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
        previousViewController.title = @"";
    }
    return YES;
}

Dengan cara ini saya cukup menetapkan kelas khusus saya untuk semua pengontrol navigasi saya dan menghapus judul dari semua tombol kembali. Dan hanya untuk kejelasan, saya selalu mengatur judul untuk semua pengontrol tampilan saya yang lain di dalam viewWillAppearsehingga judul selalu diperbarui tepat sebelum tampilan muncul (dalam kasus itu dihapus oleh trik seperti ini).


1

Hanya dengan memasukkan satu spasi untuk item navigasi tombol Kembali berfungsi !!


1
Ini lebih cocok sebagai komentar daripada jawaban.
Al Lelopath

1

Jika seperti saya Anda menggunakan tampilan khusus alih-alih UINavigationBardan Anda terjebak dengan tombol kembali maka Anda harus melakukan sedikit pekerjaan yang terasa agak sombong.

[self.navigationController.navigationBar setHidden:NO];
self.navigationController.navigationBar.topItem.title = @"";
[self.navigationController.navigationBar setHidden:YES];

Sepertinya jika itu tidak disajikan maka tidak peduli apa itu akan mencoba menunjukkan judul, ini berarti itu ditampilkan kemudian disembunyikan sebelum ditarik dan menyelesaikan masalah.


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

1

Saya telah membuat kategori konfigurasi nol yang sangat sederhana untuk menyembunyikan semua judul tombol kembali melalui aplikasi Anda dapat memeriksanya di sini . Pertanyaan ini sudah menerima jawaban, tetapi bagi orang lain itu bisa membantu.

EDIT:

file .h

#import <UIKit/UIKit.h>

@interface UINavigationController (HideBackTitle)
extern void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector);

@end

file .m

#import "UINavigationController+HideBackTitle.h"
#import <objc/runtime.h>


@implementation UINavigationController (HideBackTitle)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        PJSwizzleMethod([self class],
                    @selector(pushViewController:animated:),
                    @selector(pj_pushViewController:animated:));
    });
}

- (void)pj_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIViewController *disappearingViewController =  self.viewControllers.lastObject;
    if (disappearingViewController) {
        disappearingViewController.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
    }
    if (!disappearingViewController) {
        return [self pj_pushViewController:viewController animated:animated];
    }
    return [self pj_pushViewController:viewController animated:animated];
}



@end

void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector)
{
    Method originalMethod = class_getInstanceMethod(cls, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(cls, swizzledSelector);

    BOOL didAddMethod =
    class_addMethod(cls,
                originalSelector,
                method_getImplementation(swizzledMethod),
                method_getTypeEncoding(swizzledMethod));

    if (didAddMethod) {
        class_replaceMethod(cls,
                        swizzledSelector,
                        method_getImplementation(originalMethod),
                        method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.