UINavigationBar वापस बटन पाठ छिपाएँ


104

मैं UINavigation नियंत्रक से बैक बटन पाठ कैसे छिपा सकता हूं? मेरे पास केवल "<" होगा और "<पीछे" नहीं होगा


1
आप डिफ़ॉल्ट पाठ को संशोधित नहीं कर सकते, इसके बजाय नेविगेशन की कोशिश करें
।emft.arftButtonItem


नीचे दिए गए मेरे उत्तर को देखें, यदि आप एक उपस्थिति प्रॉक्सी का उपयोग करके वैश्विक समाधान चाहते हैं।
fl034

जवाबों:


107

इंटरफ़ेस बिल्डर में , आप पिछले नियंत्रक के नेविगेशन आइटम का चयन कर सकते हैं और Back Buttonस्ट्रिंग को बदल सकते हैं जिसे आप बैक बटन के रूप में दिखाना चाहते हैं। यदि आप इसे खाली करना चाहते हैं, उदाहरण के लिए, बस एक जगह रखो।

आप इसे इस लाइन कोड के साथ बदल भी सकते हैं :

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

या स्विफ्ट में :

self.navigationItem.backBarButtonItem?.title = ""


2
विस्मयकारी टिप, इंटरफ़ेस बिल्डर पर एक खाली जगह स्थापित करने के बारे में ...:
फेलिप फेरि

9
इंटरफ़ेस बिल्डर और स्विफ्ट प्रोग्रामेटिक रूट ने मेरे लिए XCode 8.3.2, स्विफ्ट 3
एग्रीप

आप एप्लिकेशन के माध्यम से सभी बैक बटन को छिपाने के लिए मेरे बहुत ही सरल समाधान की जांच कर सकते हैं । पुनश्च: अपने स्वयं के कोड की शून्य रेखा की आवश्यकता होती है
प्रतीक जमरिया

2
यदि Back Buttonआईबी में पहले से ही रिक्त है, तो बस सवारी करने के लिए एक स्थान जोड़ें Backऔर बस तीर दिखाएं।
तेजस K

3
यह विधि वर्तमान में केवल इंटरफ़ेस बिल्डर में काम करती है। कोड से इस सेट करने से न आप इस तरह पूरे backBarButtonItem निर्धारित करने की आवश्यकता के बजाय केवल शीर्षक की स्थापना की, काम करता है: navigationItem.backBarButtonItem = UIBarButtonItem (शीर्षक: "", शैली: .plain, लक्ष्य: शून्य, कार्रवाई: शून्य)
लेज़ेक शेजरी

81

आप स्टोरीबोर्ड के माध्यम से भी ऐसा कर सकते हैं। पिछले नियंत्रक के नेविगेशन आइटम की विशेषता निरीक्षक में आप बैक बटन फील्ड में "" सेट कर सकते हैं। नीचे इमेज देखें। "आपका शीर्षक यहाँ" को "" में बदलें। ऐसा करने से आप वांछित परिणाम प्राप्त करेंगे। अब आपको 'शीर्षक' के साथ गड़बड़ करने की आवश्यकता नहीं है।

प्रोग्रामेटिक रूप से आप उपयोग कर सकते हैं

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

जहां स्व नियंत्रक को संदर्भित करता है जो आपके इच्छित दृश्य नियंत्रक को धक्का देता है।

Xcode व्यू कंट्रोलर नेविगेशन आइटम

नेविगेशन बार से पहले, नमूना

इससे पहले इससे पहले

उपरांत उपरांत


7
यह स्टोरीबोर्ड में सेट होने पर पूरी तरह से काम करता है। बस यह सुनिश्चित करें कि नेविगेशन बार में एक नेविगेशन आइटम है ताकि इसे सेट किया जा सके।

11
IOS 9 / Xcode 7.3 में, backBarButtonItemप्रोग्रामेटिक रूप से सेट करना काम नहीं करता है, लेकिन इसे स्टोरीबोर्ड के माध्यम से सेट करना है।
स्कॉट गार्डनर

@ScottGardner, iOS 9 में मेरे लिएbackBarButtonItem प्रोग्रामेटिक रूप से काम करता है।
Suragch

यदि आपके पास अपनी स्क्रीन में नेविगेशन बार नहीं है, तो शायद इसलिए कि इसे छुपाने की आवश्यकता है, आप पिछले दृश्य नियंत्रक में स्टोरीबोर्ड में नेविगेशन आइटम जोड़ सकते हैं और इसके बैक बटन को "" में सेट कर सकते हैं।
मार्टिन बर्गर

सॉल्यूशन ने Xcode 9.2 / iOS 11.
रे हंटर

78

आप UINavigationControllerDelegateइस तरह से लागू कर सकते हैं :

पुराना स्विफ्ट

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

स्विफ्ट 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
    }
}

backBarButtonItemहै nilडिफ़ॉल्ट रूप से है और यह अगले धक्का दिया प्रभावित करता है नियंत्रक है, तो आप बस सभी नियंत्रकों के लिए यह सेट


6
धन्यवाद! यह एकमात्र समाधान है जिसने 4 डुप्लिकेट प्रश्नों और दर्जनों उत्तरों को देखने के बाद (कुछ और गड़बड़ किए बिना) काम किया।
9

1
मेरे पास पहले से ही एक नेविगेशन नियंत्रक उपवर्ग था जिसे मैंने अपने प्रतिनिधि के रूप में बनाया था। हालांकि स्विफ्ट 3 के लिए अपडेट होना चाहिए।
डीन केली

महान समाधान धन्यवाद, केवल वही जिसने मेरे लिए लगातार काम किया।
इलियट डेविस

एक आकर्षण की तरह woks।
टौनाबून

48

बैक बटन का शीर्षक सेट करना @""या nilकाम नहीं करेगा। आपको संपूर्ण बटन खाली करने की आवश्यकता है (शीर्षक या छवि के बिना):

उद्देश्य सी

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

तीव्र

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

इसे नेविगेशन स्टैक में आपके व्यू कंट्रोलर के ऊपर स्थित व्यू कंट्रोलर पर किया जाना चाहिए (यानी जहाँ से आप अपने वीसी को pushViewControllerमेथड के माध्यम से नेविगेट करते हैं )


2
धन्यवाद, यह काम करता है! स्विफ्ट में: self.navigationItem.backBarButtonItem = UIBarButtonItem (शीर्षक: "", शैली: .Pain, लक्ष्य: nil, एक्शन: nil)
mostworld77

उत्कृष्ट उत्तर .. सही ढंग से इंगित करता है कि केवल डिफ़ॉल्ट बैकबार्टन के शीर्षक को बदलना पर्याप्त नहीं होगा। उल्लेख के लिए बोनस अंक कि backBarButtonItem को पिछले व्यू कंट्रोलर में सेट किया जाना चाहिए।
Crazed'n'Dazed

30

इस समस्या का एक अन्य समाधान उन स्थितियों के लिए है जहां आपके पास बहुत सारे दृश्य नियंत्रक हैं, एक UIAppearanceप्रॉक्सी का उपयोग प्रभावी ढंग से बैक बटन शीर्षक को छिपाने के लिए है जैसे कि:

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

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

यह समाधान पाठ को एक छोटे स्पष्ट बिंदु के रूप में प्रस्तुत करेगा, मैन्युअल रूप से बैक बटन शीर्षक को सेट करने के समान है @" ", सिवाय इसके कि यह सभी बार बार बटन को प्रभावित करता है।

मैं इसे समस्या के सामान्य समाधान के रूप में नहीं सुझाता क्योंकि यह सभी नेविगेशन बार बटन को प्रभावित करता है। यह प्रतिमान को फ़्लिप करता है ताकि आप चुनें कि कब शीर्षक को दिखाना है, बजाय शीर्षक को छुपाने के।

शीर्षक दिखाने के लिए चुनने के लिए, या तो मैन्युअल रूप से आवश्यकतानुसार शीर्षक पाठ विशेषताओं को पुनर्स्थापित करें, या एक विशेष उप-वर्ग बनाएं UIBarButtonItemजो ऐसा ही करता है (संभवतः दूसरे UIAppearanceप्रॉक्सी के साथ )।

यदि आपके पास एक ऐसा ऐप है, जिसमें बैक बटन के अधिकांश शीर्षकों को छिपाने की जरूरत है, और केवल नौ (या कोई नहीं) नेवी बटन टाइटल के साथ सिस्टम बटन हैं, तो यह आपके लिए हो सकता है!

(नोट: फ़ॉन्ट रंग बदलने की आवश्यकता है, भले ही यह सुनिश्चित करने के लिए कि पाठ का शीर्षक स्पष्ट नहीं है, लेकिन लंबे समय तक शीर्षक केंद्र के बार शीर्षक को शिफ्ट करने का कारण नहीं बनता है)


मेरे कार्यान्वयन के लिए सबसे आसान समाधान था। धन्यवाद।
ट्रेवर पन्हर्स्ट

3
क्या यह बायीं बार के बटन आइटम को भी कवर नहीं करता है जो बैक बटन नहीं हैं?
२६ पर केविनल

1
हां, मैंने उतना ही नोट किया। "यह सभी नौसेना बार बटनों को प्रभावित करता है"
एडम कपलान

2
यह नेविगेशन बार में अन्य सभी बटन को प्रभावित नहीं करना चाहिए जिसमें बायां / दायां बार बटन आइटम शामिल है?
फ्योदोर वोल्चोक

हां, उसने अधिक व्यापक आवश्यकता नहीं बताई।
एडम कापलान

30

निम्नलिखित कोड को viewDidLoad या loadView में जोड़ें

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

मैंने आईफोन 9 के साथ आईफोन और आईपैड में इसका परीक्षण किया


20
यह पिछले दृश्य नियंत्रक का स्पष्ट शीर्षक नहीं था?
कैलजोन

6
इसका उपयोग न करें क्योंकि यह अंतिम स्क्रीन शीर्षक को हटा देगा
ईवा

यदि आपको इसे वर्तमान दृश्य नियंत्रक से करने की आवश्यकता है, तो पिछले vc से शीर्षक हटाने से बचने के लिए आपको ऐसा करना चाहिए: नेविगेशनकंट्रोलर? .NavigationBar.topItem ?backBarButtonItem = UIBarButtonItem (शीर्षक: "", शैली: .plain, लक्ष्य: nil। क्रिया: नील)
लेस्ज़ेक स्ज़ारी

15

आप इस उद्देश्य-सी श्रेणी को जोड़ सकते हैं ताकि नेविगेशन नियंत्रक द्वारा बनाए गए सभी "बैक" बटन में कोई पाठ न हो। मैंने अभी इसे अपनी AppDelegate.m फाइल में जोड़ा है।

@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 - (मैं नहीं जानता कि स्विफ्ट के साथ इस विस्तार कार्य को कैसे बनाया जाए, इसमें अजीब त्रुटियां थीं। स्विफ्ट को जोड़ने के लिए संपादन का स्वागत है)


यह शीर्षक "बैक" शीर्षक को छिपा नहीं देता है
राज अग्रवाल

वास्तव में, overrideयह कैसे स्विफ्ट में। बहुत ही दिलचस्प सवाल
एंड्री गगन

@teradyl यह सबसे अच्छा जवाब है।
aks.knit1108

@ एंड्री गगन, मेरा जवाब देखें
अबिरामी बाला

यह iOS 9.0 - 10.3.3 पर काम करता है, लेकिन iOS 11+ पर काम नहीं करता है।
सीहाद बेगोविक

14

मैंने कुछ ऊपर और नीचे की कोशिश की, लेकिन वे काम नहीं किया। यह मेरे लिए काम किया:

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

1
यदि आपको इसे वर्तमान दृश्य नियंत्रक से करने की आवश्यकता है, तो पिछले vc से शीर्षक हटाने से बचने के लिए आपको ऐसा करना चाहिए: navigationController? .NavigationBar.topItem ?backBarButtonItem = UIBarButtonItem (शीर्षक: "", style: .plain, target: nil)। क्रिया: नील)
लेस्ज़ेक स्ज़ारी

11

केवल एक चीज जो बिना साइड-इफ़ेक्ट के काम करती है वह है कस्टम बैक बटन बनाना। जब तक आप एक कस्टम क्रिया प्रदान नहीं करते हैं, तब तक भी स्लाइड जेस्चर काम करता है।

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

दुर्भाग्य से, यदि आप चाहते हैं कि सभी बैक बटन किसी भी शीर्षक में न हों, तो आपको इस कस्टम बैक बटन को अपने सभी व्यू कंट्रोलर में सेट करना होगा:

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

यह बहुत महत्वपूर्ण है कि आप शीर्षक के रूप में एक व्हाट्सएप सेट करें न कि खाली स्ट्रिंग।


9

पाठ को बैकबटन से प्रोग्राम से हटाने के लिए, कोड के नीचे उपयोग किया जाता है यह xcode7 और उससे ऊपर के रूप में काम करेगा।

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

या

स्टोरीबोर्ड में मैनुअलली, व्यू कंट्रोलर पर नेविगेशन बार चुनें और बैक बटन टेक्स्ट में "" डालें।

यह काम करेगा। धन्यवाद


2
यह एक नेविगेशन को हटा देगा। यह भी शीर्षक है
Ilker Baltaci

मैंने इस पर आपका उत्तर संपादित किया: self.navigationController?.navigationBar.topItem?.title = " "Xcode 9 में और काम किया!
एमएचएसफिशर

यदि आपको इसे वर्तमान दृश्य नियंत्रक से करने की आवश्यकता है, तो पिछले vc से शीर्षक हटाने से बचने के लिए आपको ऐसा करना चाहिए: navigationController? .NavigationBar.topItem ?backBarButtonItem = UIBarButtonItem (शीर्षक: "", style: .plain, target: nil)। क्रिया: नील)
लेस्ज़ेक स्ज़ारी

8

वर्तमान उत्तर काम नहीं कर रहा था। मैं शीर्षक को पूरी तरह से हटाना चाहता था , फिर भी पाठ "वापस" नहीं जा रहा था।

पिछले दृश्य नियंत्रक पर वापस जाएं और उसकी शीर्षक संपत्ति सेट करें:

self.title = @" ";

केवल तभी काम करता है जब पिछले व्यू कंट्रोलर के पास कोई शीर्षक न हो


@ZevEisenberg सुनिश्चित करें कि संपत्ति को नियंत्रक के जीवन चक्र में दिखाए जाने से पहले सेट किया जा रहा है। इसका अर्थ है इसे व्यूडलड या व्यूविलेयर के तरीकों में सेट करें।
क्रिसहैज

1
इसके अलावा, उद्धरणों के बीच एक स्थान शामिल करना सुनिश्चित करें।
क्रिसहैज

1
यह वास्तव में रिक्त स्थान के बिना मेरे लिए काम करना समाप्त कर दिया ; बस अच्छे पुराने खाली स्ट्रिंग @"":।
ज़ेव ईसेनबर्ग

1
@ ज़ेइसेनबर्ग, जब मैं पहली बार समाधान के साथ आया था तो यह पहले एक्सकोड 5 में था। एक जगह के साथ यह काम करने का एकमात्र तरीका था, यही वजह है कि मैंने इसे नमूना कोड में शामिल किया। Xcode 6 अपडेट में इसे शामिल किया जाना चाहिए। जानने के लिए अच्छा है - thx
क्रिसहेज़ know

मैंने अपने दृष्टिकोण का भी उपयोग किया, जो अभी भी काम कर रहा है, और वास्तव में मानक बैक एरो को भी हटा दिया है।
क्रिसहज

5

वैकल्पिक तरीका - कस्टम नेविगेशनबार वर्ग का उपयोग करें।

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

}

यही है, यह पूरी परियोजना को वापस शीर्षक हटाता है। UINavigationController के लिए बस कस्टम वर्ग सेट करें।


4

पिछली वीसी का शीर्षक अंतरिक्ष के साथ "" स्ट्रिंग पर सेट करें। और बैक बटन के साथ शीर्षक को सिंगल स्पेस स्ट्रिंग से बदल दिया जाएगा।

Self.title = " "

बैक प्रेस पर फिर से टाइटल को फिर से देखने के लिए ऑरिजनल में रीसेट करें।


4

एक कस्टम का उपयोग करें NavigationControllerजो ओवरराइड करता हैpushViewController

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

पहले से ही बहुत सारे उत्तर, यहाँ इस विषय पर मेरे दो सेंट हैं। मैंने इस दृष्टिकोण को वास्तव में मजबूत पाया। आपको बस seog से पहले viewController में डालने की जरूरत है।

स्विफ्ट 4:

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

2
हाँ! धन्यवाद :)
Hews

3

मैंने इस पोस्ट में सब कुछ करने की कोशिश की। एकमात्र कार्य समाधान @ VoidLess's है

यहाँ एक ही उत्तर है लेकिन अधिक पूर्ण है

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

IOS11 के लिए यह मेरा संकल्प है, मैं आवेदन में UIBarButtonItem की उपस्थिति को बदल देता हूं ।DidFinishLaunchingWithOptions:

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

आप Y ऑफ़सेट को नहीं बदल सकते, क्योंकि यह बैक बार बटन की स्थिति को iOS11 में भी बदल देगा, लेकिन यह iOS10 और नीचे में ठीक है।


1
यह काम करता है लेकिन एनीमेशन के दौरान आप पिछले शीर्षक को बाईं ओर घूमते हुए देख सकते हैं। यह थोड़ा छोटा लग रहा है।
जोनाथन

2

स्विफ्ट 3 में,

अगर आप ग्लोबल सेटिंग करते हैं

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
ध्यान दें कि यह अन्य सभी बार बटनों के लिए रंग को पारदर्शी में बदल देगा जो कि आपके ऐप में कहीं हो सकते हैं, केवल बैक बटन ही नहीं।
लेसज़ेक सजरी

2

स्विफ्ट 3.1 आप 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
}

सबसे अच्छा जवाब!
evya

2

उन लोगों के लिए जो विश्व स्तर पर बैक बटन शीर्षक छिपाना चाहते हैं।

आप एक प्रकार का शराबी कर सकते हैं viewDidLoadकी UIViewControllerइस तरह।

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

}

उपयोग:

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

2

यदि आप iOS 13 को लक्षित कर रहे हैं और बाद में आप इस नए एपीआई का उपयोग विश्व स्तर पर बैक बटन शीर्षक छिपाने के लिए कर सकते हैं ।

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
यह इष्टतम नहीं है। यदि कोई उपयोगकर्ता स्पष्ट पाठ के साथ लेबल टैप करता है, तो बैक एक्शन अभी भी चालू है।
DVDblk

1

मैं इसके साथ संघर्ष कर रहा था क्योंकि मेरे पास एक कस्टम नेविगेशन नियंत्रक था। मैं अपने कस्टम नेविगेशन नियंत्रक वर्ग में इस कोड के साथ सभी दृश्य नियंत्रकों में बैक आइटम टेक्स्ट को हटाने में सक्षम था override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

यह इस कस्टम नेविगेशन कंट्रोलर का उपयोग करके बैक आइटम के सभी शीर्षक हटाता है।


1
इसके लिए अपडेट करें: यह काम करता है लेकिन लोडिंग में एक अजीब सी चूक है जो मुझे परेशान करती है। मैंने अब AppBa में 'प्रतिनिधि में' प्रतिनिधि में 'BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributStringKey.foregroundColor: UIColor.clear] को' प्रतिनिधि 'में' प्रतिनिधि 'के रूप में जोड़ दिया है।
एमी।

0

IOS 11 में, हमने पाया कि UIBarButtonItemउपस्थिति के टेक्स्ट फ़ॉन्ट / रंग को बहुत कम मान या स्पष्ट रंग में सेट करने से अन्य बार आइटम गायब हो जाएगा (सिस्टम अब UIBarButton आइटम के वर्ग का सम्मान नहीं करता है, यह इसे एक में बदल देगा _UIModernBarButton)। साथ ही बैक टेक्स्ट को ऑफ़स्क्रीन पर सेट करने से इंटरेक्टिव पॉप के दौरान फ्लैश आएगा।

इसलिए हमने शपथ ली 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

पिछला पाठ अंतिम व्यू कंट्रोलर के text से आता है navigationItem.titleऔर navigationItem.titleस्वचालित रूप से सेट होता है self.title। समस्या को हल करने का इतना आसान तरीका हुक है way setTitle:सुनिश्चित करेंnavigationItem.title = @""

इस कोड को रखो AppDelegate.mयह ठीक हो जाएगा will

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

Https://www.jianshu.com/p/071bc50f1475 पर अधिक जानकारी https:// सरल चिनाई)


0

मेरा समाधान: - XCode: 10.2.1 - स्विफ्ट: 5

  • मूल दृश्य:
    • self.title = ""
  • बाल देखने वाला व्यक्ति:
    • self.navigationItem.title = "आपका शीर्षक" // व्यूकंट्रोलर के लिए शीर्षक सेट करने के लिए

0

XCode 11.5 स्विफ्ट 5

एक बहुत ही सरल - हालांकि शायद थोड़ा सा हैसी - प्रोग्राम करने का तरीका यह है कि अगर आपको कस्टम बैक बटन की आवश्यकता नहीं है, तो स्टैक पर जोर दे रहे व्यू नियंत्रक में शून्य के बराबर फ़ॉन्ट आकार सेट करना है, इस तरह से कुछ कॉल करना 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

अंत में संपूर्ण ऐप में डिफ़ॉल्ट बैक टेक्स्ट को छिपाने के लिए सही समाधान मिला।

बस एक पारदर्शी छवि जोड़ें और अपने AppDelegate में निम्नलिखित कोड जोड़ें।

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

-2

निम्न विधि iOS 11 पर काम करती है और अन्य iOS संस्करणों पर क्रैश नहीं करने के लिए सुरक्षित है। UIModernBarButton और UIBackButtonContainerView दोनों निजी API हैं क्योंकि ऐसा करने से आपका ऐप ऐप स्टोर की समीक्षा में अस्वीकृत हो सकता है। 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)
    }

UIModernBarButton और UIBackButtonContainerView दोनों निजी API हैं क्योंकि ऐसा करने से आपका ऐप ऐप स्टोर की समीक्षा में अस्वीकृत हो सकता है।
ग्रोत

धन्यवाद @Groot, ने आपकी चेतावनी को जोड़ा।
पैट्रिक

-5

स्विफ्ट संस्करण, पूरी तरह से विश्व स्तर पर काम करता है:

 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
आपको यह जोड़ना चाहिए, कि यह सभी पाठों को छिपाएगा भी सहीबारबटन और बाबरबटन, जो वापस नहीं जाते हैं।
लाइमफिनिटी

यह नहीं है solution। जैसा कि @limfinity ने कहा है, यह इसे UIBarButtonItem के सभी ऐप के लिए सार्वभौमिक रूप से बदल देगा
डैनट प्रालिया

मैं @limfinity और Danut Pralea से सहमत हूं, यह पूरे ऐप में UIBarButtonItem के पाठ को छिपा देगा
प्रतीक जमरिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.