2012-03-28 16 views
7

में वर्चुअल रूप से लेबल केंद्रित करना मुझे UINavigationBar पर शीर्षक दृश्य में जो लेबल जोड़ रहा है, उसे लंबवत केंद्रित करने में मुझे बहुत भाग्य नहीं है। आप देख सकते हैं कि यह नीचे जैसा दिखता है।UINavigationBar TitleView

Text not vertically aligned

यह मैं कैसे लेबल जोड़ रहा है:

UILabel *titleLabel = [[UILabel alloc] init]; 
titleLabel.text = NSLocalizedString(@"activeSessionsTitle",@""); 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

super.navigationItem.titleView = titleLabel; 

मैं कारण है कि यह इस है कर रहा है लगता है कि मैं उपयोग कर रहा हूँ वास्तविक फॉन्ट के साथ कुछ अजीब है - के रूप में मुझे बटन और इस तरह के अंदर बहुत सारे पुनर्स्थापन करना पड़ा। मैं हर जगह मुद्दे को हल करने में सक्षम हूं लेकिन नेविगेशन बार।

+0

यह एक फर्क नहीं मालूम था इस पोस्ट http://stackoverflow.com/a/8475788/716216 –

उत्तर

11

मैं जवाब आरपीएम का एक संयोजन छोड़ दिया और मेरे सवाल पर टिप्पणी से एक का उपयोग समाप्त हो गया के रूप में अपने लेबल दृश्य के फ्रेम सेट कर सकते हैं। यह वही है अंततः मेरे लिए यह तय हो गई है:

UIView *customTitleView = [[UIView alloc] init]; 
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 3.0f, 200.0f, 30.0f)]; 
titleLabel.text = titleString; 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

customTitleView.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

[customTitleView addSubview:titleLabel]; 
[titleLabel release]; 

[self.navigationItem setTitleView:customTitleView]; 
[customTitleView release]; 

आप कोड के इस खंड का उपयोग कर रहे हैं, तो आप शीर्षक लेबल की initWithFrame पर "y" मूल्य के साथ खेलने के लिए हो सकता है: कहते हैं। मैंने इसे 3.0 एफ पर सेट किया है, लेकिन आपको इसे अपने स्वयं के उपयोग के लिए थोड़ा सा समायोजित करना पड़ सकता है।

अन्य समाधान मेरे लिए काम नहीं कर रहे हैं क्योंकि वे एक बारबटन (बाएं या दाएं) के आधार पर क्षैतिज रूप से ऑफ-सेंटर जाएंगे। यदि कोई बार बटन नहीं था तो यह ठीक था, और यदि दो थे तो यह ठीक था। लेकिन एक इसे ऑफ-सेंटर जाने का कारण बनता है।

+0

5 से कम आईओएस के लिए बढ़िया है, लेकिन आईओएस 5 के बाद आपके पास उपस्थिति एपीआई है और आपको ऐसा करने की आवश्यकता नहीं है, इसलिए @ मो जवाब – bandejapaisa

1

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

आप भी इस तरह के

titleLabel.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

self.navigationItem.titleView = titleLabel; 
+0

देखें - हालांकि मैं एक अलग तरीके से अपने जवाब का उपयोग किया था! – Hosemeyer

+0

आह हाँ - आपको इसे एक सुपर व्यू में जोड़ना होगा और इसे शीर्षक दृश्य के रूप में असाइन करना होगा। मुझे खेद है - मुझे आपको पहले बताया जाना चाहिए था। मुझे यह भी पता था :( – RPM

+0

वास्तव में शीर्षक लेबल क्या है? –

28

एक पुराना प्रश्न खोलना, लेकिन मुझे यह बहुत उपयोगी पाया गया।

[[UINavigationBar appearance] setTitleTextAttributes: 
     [NSDictionary dictionaryWithObjectsAndKeys: 
      [UIColor redColor], 
      UITextAttributeTextColor, 
      [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
      UITextAttributeTextShadowColor, 
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
      UITextAttributeTextShadowOffset, 
      [UIFont fontWithName:@"HelveticaNeue" size:25.0f], 
      UITextAttributeFont, 
      nil]]; 

कभी कभी, UIFont है कि आप का उपयोग करें, शीर्षक देख सकते हैं पर निर्भर करता है:

iOS 5 अपने [UINavigationBar appearance] जो एक कस्टम UIView की आवश्यकता के बिना शीर्षक पट्टी के शीर्षक दृश्य को बदलने के लिए अच्छा है का उपयोग करने के लिए अनुमति देता है लंबवत बंद हो।

इसे ठीक करने के लिए आप उपयोग कर सकते हैं:

[self.navigationBar setTitleVerticalPositionAdjustment:(float) forBarMetrics:UIBarMetricsDefault]; 

(float) एक सकारात्मक मूल्य titleView नीचे पुश करने के लिए, और एक नकारात्मक मूल्य titleView अप पुश करने के लिए किया जा रहा है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+7

आप UINavigationBar उपस्थिति का उपयोग करके ऊर्ध्वाधर स्थिति समायोजन भी सेट कर सकते हैं, यानी: '[[UINavigationBar उपस्थिति] setTitleVerticalPositionAdjustment: (फ्लोट) के लिए BarMetrics: UIBarMetricsDefault]; ' –

+2

आपने अभी मेरी गर्दन को बचाया है, महोदय! मेरा अपवित्र ले लो! :) – nburk

+0

आपका स्वागत है nburk। :) – Moe

0
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,NSForegroundColorAttributeName:UIColor.whiteColor()] 
+1

ओपी क्या नहीं पूछ रहा था। – Cesare