2012-04-11 14 views
22

मैं में आईओएस 5 के लिए निम्नलिखित कोड का उपयोग कर मेरी UINavigationBar फ़ॉन्ट अनुकूलित करने के लिए कोशिश कर रहा हूँ, मेरे ऐप प्रतिनिधि के application:didFinishLaunchingWithOptions:अनुकूलित UINavigationBar फ़ॉन्ट

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) 
{ 
    [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                  [UIColor whiteColor], UITextAttributeTextColor, 
                  [UIColor blackColor], UITextAttributeTextShadowColor, 
                  [NSValue valueWithUIOffset:UIOffsetMake(1, 0)], UITextAttributeTextShadowOffset, 
                  [UIFont fontWithName:kDefaultFont size:0.0], UITextAttributeFont, 
                  nil]]; 
} 

यह ठीक काम करता है और नेविगेशन पट्टी मेरे फ़ॉन्ट का उपयोग कर गाया है। महान।

references मुझे पता चला है कि आप शून्य के फ़ॉन्ट आकार का उपयोग कर सकते हैं और यह आपके नेविगेशन बार को फिट करने के लिए फ़ॉन्ट का आकार बदल देगा (लैंडस्केप लेआउट के लिए छोटे नेविगेशन बार के लिए थोड़ा छोटा फ़ॉन्ट का उपयोग करके)। और यह एक फ़ॉन्ट आकार चुनता है जो नेविगेशन बार की ऊंचाई पर अच्छी तरह से फिट बैठता है। लेकिन ऐसा लगता है कि क्या आप पोर्ट्रेट से परिदृश्य और पीछे जाते हैं, नेविगेशन बार के शीर्षक लेबल की चौड़ाई खराब हो जाती है, इसलिए शीर्षक के रूप में जो दिखाता है, उदाहरण के लिए, "लांग टाइटलबार", जब आप इसे पहली बार देखते हैं तो ठीक लग रहा है पोर्ट्रेट ओरिएंटेशन में, जब आप इसे लैंडस्केप (उचित रूप से छोटे फ़ॉन्ट के साथ) देखते हैं तो ठीक लग रहा है, लेकिन जब मैं पोर्ट्रेट पर वापस आ जाता हूं, तो फ़ॉन्ट सही ढंग से बड़े फ़ॉन्ट पर वापस आ जाता है, लेकिन शीर्षक टेक्स्ट को छोटा कर दिया जाता है, जिससे "लंबा .. "भले ही पूर्ण शीर्षक के लिए पर्याप्त जगह है। 0.0 के फ़ॉन्ट आकार का उपयोग करते समय किसी और ने इस व्यवहार को देखा है?

स्पष्ट रूप से, मैं केवल एक वास्तविक फ़ॉन्ट आकार निर्दिष्ट कर सकता हूं (जिस स्थिति में मुझे यह छोटा व्यवहार नहीं दिख रहा है), लेकिन फिर मैं मैन्युअल रूप से यह पता लगा रहा हूं कि किस आकार का उपयोग करना है। और इससे भी बदतर, फ़ॉन्ट आकार लैंडस्केप और पोर्ट्रेट के लिए समान है, इसलिए अभी मैं एक फ़ॉन्ट आकार का उपयोग कर रहा हूं जो छोटे परिदृश्य नेविगेशन बार शीर्षक में फिट बैठता है और शीर्षक लम्बे पोर्ट्रेट नेविगेशन बार में होने की आवश्यकता से छोटा है।

क्या किसी को भी का उपयोग [UINavigationBar appearance] के फ़ॉन्ट को बदलने के लिए अनुभव किया गया है ताकि फ़ॉन्ट आकार चित्र और परिदृश्य के बीच बदल जाए, लेकिन जब आप जाने के बाद चित्र पर वापस लौटते हैं तो शीर्षक का यह छंटनी नहीं होता है परिदृश्य के लिए? मैं विभिन्न क्लूडी वर्कअराउंड्स का पीछा करने जा रहा हूं, लेकिन अगर आपको इस मुद्दे में कोई अनुभव है, तो मुझे बताएं।

अद्यतन:

एप्पल को यह बग जमा करने की प्रक्रिया में, मैं प्रदर्शित करने के लिए कैसे समस्या पुन: पेश करने का फैसला किया:

  1. Xcode 4.3 में नया iOS मास्टर-विस्तार से आवेदन बनाएँ। 2।

  2. ऐप प्रतिनिधि के application:didFinishLaunchingWithOptions में उपरोक्त setTitleTextAttributes कोड डालें (मैंने फ़ॉन्ट @ "गिलसन" का उपयोग किया था)।

  3. MasterViewController में जाओ और लाइन है कि कहते हैं self.title = @"Long Title";

  4. टिप्पणी बाहर UIBarButtonItem *addButton कोड जोड़ें।

  5. प्रोग्राम चलाएं। नोट शीर्षक सही ढंग से "लंबा शीर्षक" कहता है। परिदृश्य में घुमाएं। अभी भी अच्छा लग रहा है। पोर्ट्रेट पर वापस घुमाएं और शीर्षक अब "लांग ..." कहता है, भले ही वहां बहुत सारी जगह है।

  6. उत्सुकता से, यदि आप UIBarButtonItem *addButton कोड को पुनर्स्थापित करते हैं, तो शीर्षक उस कार्य के रूप में कार्य करता है। लेकिन यदि आप या तो UIBarButton आइटम को खत्म करते हैं, या इसे 10 के बजाय initWithTitle का उपयोग करने वाले बटन के साथ प्रतिस्थापित करते हैं, तो आपको पोर्ट्रेट से परिदृश्य में घूर्णन करने के बाद नेविगेशन बार शीर्षक के साथ समस्या मिलती है और फिर चित्र पर वापस आती है।

+0

मुझे एक समस्या थी जहां पहली बार प्रदर्शित होने पर मेरे कस्टम फ़ॉन्ट नेविगेशन बार शीर्षक "समय-समय पर छंटनी" किए गए थे लेकिन उसके बाद ठीक थे। आईओएस 6-आईएसएम माना जाता है। वैसे भी, मैं खोज रहा हूं कि मैं फ़ॉन्ट आकार को 0.0 तक सेट कर सकता हूं। धन्यवाद! – mharper

+1

इस विधि का उपयोग करते हुए आईओएस 5.1 सिम्युलेटर पर दिलचस्प बात यह है कि शीर्षक * pushModalViewController संक्रमण के दौरान * छोटा कर दिया गया है, लेकिन संक्रमण पूर्ण होने के बाद ठीक दिखाई देता है। आईओएस 6.0 सिम्युलेटर पर, यह अपेक्षित के रूप में काम करता है। –

उत्तर

1

निम्नलिखित इस समस्या के लिए मेरे समाधान नहीं है, और यहाँ टिप्पणी है कि क्यों मैं कोड के इस बिट कार्यान्वित के रूप में अपने आप को एक चेतावनी के रूप में प्रत्येक मामले में मेरी वैकल्पिक हल कार्यान्वयन के पास दिखाई देता है:

// when using an appearance proxy to set a custom font for the navigation bar (generally in 
// application:didFinishLaunchingWithOptions: in the appDelegate code) for both iOS 5 & 6, 
// there's a glitch that incorrectly auto-truncates the title in the following cirumstances: 
// 
// 1) when a 0.0 value is used for UITextAttributeFont in the titleTextAttributes dictionary 
// and a device/simulator running pre-iOS 5 rotates back to portrait from landscape 
// solution: perform [self.navigationController.navigationBar setNeedsLayout] in 
//    didRotateFromInterfaceOrientation: the view controller in which the 
//    auto-truncation is incorrectly occurring for systemVersion < 6.0 
// 
// 2) when a view initially loads running iOS 6 for a non-0.0 value for the UITextAttributeFont 
// in the titleTextAttributes dictionary 
// solution: perform [self.navigationController.navigationBar setNeedsLayout] 
//    in viewDidLoad in the view controller in which the auto truncation is 
//    incorrectly occurring for systemVersion >= 6.0 

हां, तो ऐसे मामलों में जहां मैं UITextAttributeFont के लिए 0.0 मूल्य का उपयोग कर के साथ ठीक हूँ लेकिन iOS5 समर्थन जारी रखने के लिए है, मैं समाधान का उपयोग करने के लिए (1):

#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation) 
     && UIDevice.currentDevice.systemVersion.floatValue < 6.0) 
     [self.navigationController.navigationBar setNeedsLayout]; 
} 
#endif 

और में टी वह विरासत कोड के कुछ मामलों में जहां मैं आईओएस 6 का समर्थन करना चाहता था और गड़बड़ी को ठीक करना चाहता था जब दृश्य पहली बार MyAppAppearance क्लास विधियों को फिर से लिखने के बिना प्रकट होता है, मैंने अपने [UINavigationBar appearance] titleTextAttributes के लिए गैर-0.0 मान सेट किए हैं, मुझे यह आसान लगता है समाधान (2) इस प्रकार लागू:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0 
    if (UIDevice.currentDevice.systemVersion.floatValue >= 6.0) 
#endif 
     [self.navigationController.navigationBar setNeedsLayout]; 

    // … other viewDidLoadCode 

(और __IPHONE_OS_VERSION_MIN_REQUIRED ब्रैकेट सिर्फ मुझे याद दिलाना जो कोड अंततः दूर जा सकते हैं भविष्य में वांछित मदद करता है, और जो रहने के लिए हो सकता है।)

को देखने के लिए यहां कुछ और सटीक रूप से क्या होता है, खासतौर पर घूर्णन के मामले में, सिम्युलेटर को धीमा एनिमेशन के साथ चलाएं।

1

मुझे लगता है कि डिवाइस रोटेशन के बाद आपके Navbar के शीर्षक को रीफ्रेश करना एक अच्छा समाधान है। कुछ

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 

     self.navigationItem.title = @"Your title"; 

} 

आशा है कि इससे मदद मिलती है!

+0

यह निश्चित रूप से, मैंने कोशिश की पहली चीजों में से एक था। कोई आनंद नहीं है। – Rob

3

वैसे, मैंने यह इंगित करने के लिए उपेक्षित किया कि ऐप्पल ने मेरी बग रिपोर्ट का जवाब दिया है, यह स्वीकार करते हुए कि यह एक ज्ञात मुद्दा था। उम्मीद है कि यह जल्द ही हल हो जाएगा!

1

@ अब्राहोडज (जो काम नहीं करता) की प्रतिक्रिया के आधार पर, मैंने कोशिश की। संभवतः उस समाधान में कुछ भी नहीं हो रहा था क्योंकि सिस्टम नोटिस करता है कि पाठ वास्तव में नहीं बदला गया है। कुछ भी नहीं स्विच करना और फिर इसे फिर से बाहर करना।

आईओएस 5.0 पर निश्चित रूप से काम करने के रूप में परीक्षण किया गया।

// iOS5 has a bug where if you switch orientation the title bar text gets cut off... 
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation  { 
    self.navigationItem.title = @""; 
    self.navigationItem.title = @"Your Title"; 
} 
0

बग क्लेटन के वर्णन जैसे अभिविन्यास स्विचिंग नहीं कर रहे हैं, भले ही उपस्थिति के माध्यम से परिवर्तन लागू करने के बाद एक यूनाविगेशनबार शीर्षक टेक्स्ट काट दिया जा सकता है। मैंने देखा है कि यह समस्या किसी ऐप पर होती है जो केवल पोर्ट्रेट अभिविन्यास का समर्थन करती है।

[self.navigationItem setTitle:@""]; 
[self.navigationItem setTitle:@"The real title"]; 

इस तरह के मामले में भी ठीक काम करेगा।

वैसे, मुझे आईओएस 5 के बाद से यह समस्या आई है। अभी आईओएस 6 में अभी इसका परीक्षण किया गया है और यह अभी भी है। क्या बिल्ली, ऐप्पल?

संबंधित मुद्दे