UINavigationBar Sembunyikan kembali Teks Tombol

104

Bagaimana cara menyembunyikan Teks Tombol Kembali dari Pengontrol UINavigasi? Saya hanya akan memiliki "<" dan bukan "<Back"

Nils
sumber
1
Anda tidak dapat mengubah teks default, sebagai gantinya coba navigationItem.leftBarButtonItem untuk menyetel tombol kembali kustom
BaSha
Lihat jawaban saya di bawah ini, jika Anda menginginkan solusi global menggunakan proxy tampilan.
fl034

Jawaban:

107

Di pembuat antarmuka , Anda dapat memilih item navigasi dari pengontrol sebelumnya dan mengubah Back Buttonstring ke tampilan tombol kembali yang Anda inginkan. Jika ingin kosong misalnya, beri spasi.

Anda juga dapat mengubahnya dengan baris kode ini:

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

Atau di Swift :

self.navigationItem.backBarButtonItem?.title = ""

rebello95
sumber
2
Tip yang luar biasa, yang tentang mengatur ruang kosong pada pembuat antarmuka ... :-D
Felipe Ferri
9
Pembuat antarmuka dan rute terprogram Swift tidak berfungsi untuk saya di XCode 8.3.2, Swift 3
agrippa
Anda dapat memeriksa solusi saya yang sangat sederhana untuk menyembunyikan semua tombol kembali melalui aplikasi. PS: Membutuhkan baris kode nol Anda sendiri
Pratik Jamariya
2
Jika Back Buttonsudah kosong di IB, tambahkan spasi untuk naik Backdan tunjukkan panahnya.
Tejas K
3
Metode ini saat ini hanya berfungsi di pembuat antarmuka. Menyetel ini dari kode tidak berfungsi, alih-alih hanya menyetel judul, Anda perlu menyetel seluruh backBarButtonItem seperti ini: navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary
81

Anda juga bisa melakukan ini melalui papan cerita. Dalam inspektur atribut item navigasi dari pengontrol sebelumnya, Anda dapat menyetel "" di bidang tombol Kembali. Lihat Gambar di bawah. Ganti "Judul Anda di sini" menjadi "". Dengan melakukan ini, Anda akan mencapai hasil yang diinginkan. Anda tidak perlu lagi mengotak-atik 'Judul'.

Secara terprogram Anda bisa menggunakan

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

di mana self mengacu pada pengontrol yang mendorong pengontrol Tampilan yang Anda inginkan.

Item navigasi pengontrol tampilan Xcode

Sampel Sebelum, Setelah bilah Navigasi

Sebelum Sebelum

Setelah Setelah

Shahzin KS
sumber
7
Ini berfungsi dengan sempurna jika diatur di papan cerita. Pastikan saja bahwa bilah navigasi memiliki item navigasi di dalamnya sehingga dapat disetel.
11
Di iOS 9 / Xcode 7.3, pengaturan secara backBarButtonItemterprogram tidak berfungsi, tetapi pengaturan melalui storyboard berfungsi.
Scott Gardner
@ScottGardner, pengaturan secara backBarButtonItemterprogram bekerja untuk saya di iOS 9.
Suragch
Jika Anda tidak memiliki bilah navigasi di layar Anda, mungkin karena perlu disembunyikan, Anda dapat menambahkan item navigasi di storyboard, ke pengontrol tampilan sebelumnya dan mengatur tombol kembali ke "".
Martin Berger
Solusi bekerja dengan baik dan sangat mudah diimplementasikan di Xcode 9.2 / iOS 11.
Ray Hunter
78

Anda dapat menerapkan UINavigationControllerDelegateseperti ini:

Swift yang lebih tua

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

Cepat 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
    }
}

backBarButtonItemsecara nildefault dan ini memengaruhi pengontrol yang didorong berikutnya, jadi Anda cukup menyetelnya untuk semua pengontrol

VoidLess
sumber
6
Terima kasih! Ini adalah satu-satunya solusi yang berhasil (tanpa mengacaukan apa pun) setelah melihat 4 pertanyaan duplikat dan lusinan jawaban.
inket
1
Saya sudah memiliki subkelas pengontrol navigasi yang saya buat menjadi delegasi sendiri ini bekerja dengan sempurna. Harus memperbarui untuk Swift 3 sekalipun.
Dean Kelly
Solusi hebat terima kasih, satu-satunya yang bekerja secara konsisten untuk saya.
Elliott Davies
Wajan seperti pesona.
tounaobun
48

Menyetel judul tombol kembali ke @""atau niltidak akan berfungsi. Anda perlu mengosongkan seluruh tombol (tanpa judul atau gambar):

Objective-C

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

Cepat

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

Ini harus dilakukan pada pengontrol tampilan yang ada di atas pengontrol tampilan Anda di tumpukan navigasi (yaitu dari tempat Anda menavigasi ke VC melalui pushViewControllermetode)

serigala
sumber
2
terima kasih, ini berhasil! Dalam swift: self.navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .Plain, target: nil, action: nil)
mostworld77
jawaban yang sangat baik .. dengan benar menunjukkan bahwa hanya mengubah judul backBarButtonItem default tidak akan cukup. Poin bonus untuk menyebutkan bahwa backBarButtonItem harus disetel di pengontrol tampilan sebelumnya.
Crazed'n'Dazed
30

Solusi lain untuk masalah ini untuk situasi di mana Anda memiliki banyak pengontrol tampilan adalah dengan menggunakan UIAppearanceproxy untuk secara efektif menyembunyikan teks judul tombol kembali seperti ini:

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

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

Solusi ini akan membuat teks sebagai titik bening kecil, mirip dengan mengatur judul tombol kembali secara manual @" ", kecuali bahwa hal itu mempengaruhi semua tombol bilah navigasi.

Saya tidak menyarankan ini sebagai solusi umum untuk masalah ini karena ini memengaruhi semua tombol bilah navigasi. Ini membalik paradigma sehingga Anda memilih kapan harus menampilkan judul tombol, daripada kapan menyembunyikan judul.

Untuk memilih kapan akan menampilkan judul, pulihkan atribut teks judul secara manual sesuai kebutuhan, atau buat subkelas khusus UIBarButtonItemyang melakukan hal yang sama (berpotensi dengan UIAppearanceproxy lain ).

Jika Anda memiliki aplikasi yang sebagian besar judul tombol kembali perlu disembunyikan, dan hanya beberapa (atau tidak ada) tombol navigasi yang merupakan tombol sistem dengan judul, ini mungkin cocok untuk Anda!

(Catatan: perubahan ukuran font diperlukan meskipun warna teksnya jelas untuk memastikan bahwa judul yang panjang tidak menyebabkan judul bilah navigasi tengah bergeser)

Adam Kaplan
sumber
Apakah solusi termudah untuk implementasi saya. Terima kasih.
Trevor Panhorst
3
Bukankah ini juga menutupi item tombol bar kiri yang bukan tombol kembali?
kevinl
1
Ya, saya mencatat sebanyak itu. "itu mempengaruhi semua tombol nav bar"
Adam Kaplan
2
bukankah seharusnya itu memengaruhi semua tombol lain di bilah navigasi termasuk item tombol bilah kiri / kanan?
Fyodor Volchyok
Ya, dia tidak menentukan persyaratan yang lebih komprehensif.
Adam Kaplan
30

Tambahkan kode berikut di viewDidLoad atau loadView

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

Saya mengujinya di iPhone dan iPad dengan iOS 9

sendirian
sumber
20
Ini tidak menghapus judul pengontrol tampilan sebelumnya?
CalZone
6
Jangan gunakan karena itu akan menghapus judul layar terakhir
evya
Jika Anda perlu melakukannya dari pengontrol tampilan saat ini, maka untuk menghindari penghapusan judul dari vc sebelumnya, Anda sebaiknya melakukan: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, tindakan: nihil)
Leszek Szary
15

Anda dapat menambahkan kategori Objective-C ini agar semua tombol "Kembali" yang dibuat oleh pengontrol navigasi tidak memiliki teks. Saya baru saja menambahkannya ke file AppDelegate.m saya.

@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

PS - (Saya tidak tahu cara membuat ekstensi ini berfungsi dengan Swift, ada kesalahan yang aneh. Pengeditan boleh menambahkan versi Swift)

teradyl
sumber
Ini memberi judul "Kembali" bukan menyembunyikan judul
Raj Aggrawal
Sungguh, bagaimana melakukannya overridedengan cepat. Pertanyaan yang sangat menarik
Andrey Gagan
@teradyl itu adalah jawaban terbaik.
aks.knit1108
@Andrey Gagan, lihat jawaban saya
Abirami Bala
Ini berfungsi di iOS 9.0 - 10.3.3, tetapi di iOS 11+ tidak berfungsi.
Sihad Begovic
14

Saya mencoba beberapa di atas dan di bawah tetapi tidak berhasil. Ini berhasil untuk saya:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.topItem?.title = ""
}
catanore
sumber
1
Jika Anda perlu melakukannya dari pengontrol tampilan saat ini, maka untuk menghindari penghapusan judul dari vc sebelumnya, Anda sebaiknya melakukan: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, aksi: nihil)
Leszek Szary
11

Satu-satunya hal yang berfungsi tanpa efek samping adalah membuat tombol kembali kustom. Selama Anda tidak memberikan tindakan kustom, bahkan gerakan slide berfungsi.

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

Sayangnya, jika Anda ingin semua tombol kembali tidak memiliki judul, Anda perlu mengatur tombol kembali khusus ini di semua pengontrol tampilan Anda: /

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

Sangat penting untuk Anda menetapkan spasi sebagai judul dan bukan string kosong.

Cezar Signori
sumber
9

untuk menghapus Teks dari tombol belakang secara terprogram, gunakan di bawah Kode ini akan berfungsi dari xcode7 ke atas.

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

atau

manualLy di papan cerita, pilih bilah navigasi di pengontrol tampilan dan letakkan "" di teks tombol kembali.

ini akan berhasil. Terima kasih

Jyothi Babu Pakalz
sumber
2
Yang ini akan menghapus judul navigationItem juga
Ilker Baltaci
Saya mengedit jawaban Anda untuk ini: self.navigationController?.navigationBar.topItem?.title = " "di Xcode 9 dan berhasil!
MHSFisher
Jika Anda perlu melakukannya dari pengontrol tampilan saat ini, maka untuk menghindari penghapusan judul dari vc sebelumnya, Anda sebaiknya melakukan: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, tindakan: nihil)
Leszek Szary
8

Jawaban saat ini tidak berfungsi. Saya ingin menghapus judul seluruhnya, namun teks "kembali" tidak menghilang.

Kembali ke pengontrol tampilan sebelumnya dan setel properti judulnya:

self.title = @" ";

HANYA berfungsi jika View Controller sebelumnya tidak memiliki judul

ChrisHaze
sumber
@ZevEisenberg pastikan properti disetel sebelum ditampilkan dalam siklus hidup View Controller. Artinya, setel dalam metode viewDidLoad atau viewWillAppear.
ChrisHaze
1
juga, pastikan untuk memasukkan spasi di antara tanda kutip.
ChrisHaze
1
Ini benar-benar akhirnya bekerja untuk saya tanpa ruang; hanya baik tua string kosong: @"".
Zev Eisenberg
1
@ZevEisenberg, Ketika saya pertama kali menemukan solusi itu sebelumnya di Xcode 5. Dengan spasi adalah satu-satunya cara kerjanya, itulah mengapa saya memasukkannya ke dalam kode sampel. Pembaruan Xcode 6 harus menyertakannya. Baik untuk tahu - thx
ChrisHaze
Saya juga menggunakan pendekatan saya, yang masih berfungsi, dan benar-benar menghapus panah mundur standar juga.
ChrisHaze
5

Cara alternatif - gunakan kelas NavigationBar kustom.

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()
    }

}

Artinya, ini menghapus kembali judul seluruh proyek. Cukup setel kelas khusus untuk UINavigationController.

LLIAJLbHOu
sumber
4

Setel Judul VC Sebelumnya menjadi string "" dengan spasi. dan judul dengan tombol kembali akan diganti dengan string spasi tunggal.

Self.title = " "

On Back tekan lagi setel ulang judul ke yang asli di viewWillAppear.

Mohit Kumar
sumber
4

Gunakan kebiasaan NavigationControlleryang menggantikanpushViewController

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)
  }
}
onmyway133
sumber
4

Sudah banyak jawaban, inilah dua sen saya untuk masalah ini. Saya menemukan pendekatan ini sangat kuat. Anda hanya perlu meletakkan ini di viewController sebelum segue.

Cepat 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Codetard
sumber
2
Iya! Terima kasih :)
Hews
3

Saya mencoba semuanya di posting ini. Satu-satunya solusi yang berfungsi adalah @ VoidLess

Ini jawabannya sama tapi lebih lengkap

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)
    }
}
Christos Chadjikyriacou
sumber
3

Ini adalah resolusi saya untuk iOS11, saya mengubah tampilan UIBarButtonItem di applicationDidFinishLaunchingWithOptions:

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

Anda tidak dapat mengubah offset Y, karena itu akan mengubah posisi tombol bar belakang juga di iOS11, tetapi tidak masalah di iOS10 dan di bawahnya.

VictorChee
sumber
1
Ini berfungsi tetapi selama animasi Anda dapat melihat judul sebelumnya bergerak ke kiri. Ini terlihat sedikit buggy.
Jonathan
2

Di Swift3,

Jika Anda mengatur pengaturan global

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)


    // ...

}
taku_oka
sumber
1
Perhatikan bahwa ini juga akan mengubah warna menjadi transparan untuk semua tombol bar lain yang mungkin Anda miliki di suatu tempat di aplikasi Anda, tidak hanya tombol kembali.
Leszek Szary
2

Swift 3.1 Anda dapat melakukan ini dengan mengimplementasikan metode delegasi UINavigationController.

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
}
SMMoinuddin. Shuvo
sumber
Jawaban terbaik!
evya
2

Bagi mereka yang ingin menyembunyikan judul tombol kembali secara global.

Anda dapat Swizzle viewDidLoaddari UIViewControllerseperti ini.

+ (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);
    }

}

Pemakaian:

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

Jika Anda menargetkan iOS 13 dan yang lebih baru, Anda dapat menggunakan API baru ini untuk menyembunyikan judul tombol kembali secara global .

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

UINavigationBar.appearance().standardAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().compactAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().scrollEdgeAppearance.backButtonAppearance = backButtonAppearance
fl034
sumber
1
Ini tidak optimal. Jika pengguna mengetuk label dengan teks jelas, tindakan mundur masih dipicu.
dvdblk
1

Saya berjuang dengan ini karena saya memiliki pengontrol navigasi khusus. Saya dapat menghapus teks item belakang di semua pengontrol tampilan dengan kode ini di kelas pengontrol navigasi kustom saya override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

Ini menghapus semua judul item belakang menggunakan pengontrol navigasi kustom ini.

Amy.R
sumber
1
Perbarui untuk ini: ini berfungsi tetapi ada kelambatan aneh dalam pemuatan yang mengganggu saya. Sekarang saya telah menambahkan ini 'let BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor: UIColor.clear], untuk: .normal)' di App delegate didLaunchWithOptions, dan itu bekerja dengan sempurna!
Amy.R
0

Di iOS 11, kami menemukan bahwa mengatur UIBarButtonItemfont / warna teks tampilan ke nilai yang sangat kecil atau warna yang jelas akan mengakibatkan item bar lain menghilang (sistem tidak menghormati kelas item UIBarButton lagi, itu akan mengubahnya menjadi a _UIModernBarButton). Juga mengatur offset teks belakang ke offscreen akan menghasilkan flash selama pop interaktif.

Jadi kami bingung 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];
}
sbhhbs.dll
sumber
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];
}
niku
sumber
0

Teks belakang berasal dari View Controller terakhir navigationItem.title, dan navigationItem.titlesecara otomatis diatur oleh self.title. Cara termudah untuk memecahkan masalah ini adalah dengan hook setTitle:, pastikannavigationItem.title = @""

Letakkan kode ini di AppDelegate.makan membuatnya ok。

    [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];

Detail lebih lanjut di https://www.jianshu.com/p/071bc50f1475(Simple Chinease)

fengxing
sumber
0

Solusi saya: - XCode: 10.2.1 - Swift: 5

  • Pengontrol tampilan induk:
    • self.title = ""
  • Pengontrol tampilan anak:
    • self.navigationItem.title = "Judul Anda" // untuk menyetel judul untuk viewcontroller
PhuocLuong
sumber
0

XCode 11.5 Cepat 5

Cara yang sangat sederhana - meskipun mungkin sedikit hacky - untuk melakukan ini secara terprogram jika Anda tidak memerlukan tombol kembali kustom adalah dengan mengatur ukuran font sama dengan nol di pengontrol tampilan yang Anda dorong ke tumpukan, memanggil sesuatu seperti ini dari 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
}
Pakchoiandbacon
sumber
-1

Akhirnya menemukan solusi sempurna untuk menyembunyikan teks belakang default di seluruh aplikasi.

Cukup tambahkan satu Gambar transparan dan tambahkan kode berikut di AppDelegate Anda.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
Lalit Kumar
sumber
-2

Metode berikut berfungsi di iOS 11 dan aman untuk tidak mogok di versi iOS lainnya. Melakukan hal ini dapat membuat aplikasi Anda ditolak dalam peninjauan App Store karena UIModernBarButton dan UIBackButtonContainerView adalah API pribadi. Tempatkan di AppDelegate.

    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)
    }
Patrick
sumber
Melakukan hal ini dapat membuat aplikasi Anda ditolak dalam peninjauan App Store karena UIModernBarButton dan UIBackButtonContainerView adalah API pribadi.
Groot
Terima kasih @Groot, menambahkan peringatan Anda.
Patrick
-5

Versi Swift, bekerja dengan 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
    }
PeiweiChen
sumber
7
Anda harus menambahkan, bahwa ini akan menyembunyikan semua teks juga rightBarButtons dan leftBarButtons, yang tidak kembali.
limfinity
ini bukan solution. Seperti yang ditunjukkan @limfinity, itu akan mengubahnya secara universal untuk semua UIBarButtonItem di seluruh aplikasi
Danut Pralea
saya setuju dengan @limfinity dan Danut Pralea, itu akan menyembunyikan semua teks UIBarButtonItem di seluruh aplikasi
Pratik Jamariya