IOS5 उपस्थिति API का उपयोग करके UINavigationBar में शीर्षक का फ़ॉन्ट और रंग कैसे सेट करें?


90

मेरे पास एक मल्टीपल व्यू कंट्रोलर है और मैं सभी का फॉन्ट कलर रेड करना चाहता हूं।

 [[UINavigationBar appearance] setFont:[UIFont boldSystemFontOfSize:12.0]];

एक गैर-मान्यता प्राप्त चयनकर्ता त्रुटि फेंक रहा है।

मैं इसे कैसे ठीक करूं?


तब आपको लेबल को सेट करना चाहिए और नेविगेशन बार पर व्यू करना चाहिए ans फ़ॉन्ट रंग
विस्फोफ़ोन

जवाबों:


207

रे वेंडरलिच से:

http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

// Customize the title text for *all* UINavigationBars
[[UINavigationBar appearance] setTitleTextAttributes:
    [NSDictionary dictionaryWithObjectsAndKeys:
        [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0], 
        UITextAttributeTextColor, 
        [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
        UITextAttributeTextShadowColor, 
        [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
        UITextAttributeTextShadowOffset, 
        [UIFont fontWithName:@"Arial-Bold" size:0.0], 
        UITextAttributeFont, 
        nil]];

या यदि आप वस्तु शाब्दिक शैली के साथ पसंद करते हैं:

[[UINavigationBar appearance] setTitleTextAttributes:@{
    UITextAttributeTextColor: [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
    UITextAttributeTextShadowColor: [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
    UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
    UITextAttributeFont: [UIFont fontWithName:@"Arial-Bold" size:0.0],
}];

IOS 7 और निम्नलिखित के लिए संपादित करें

UITextAttributes आईओएस 7 के रूप में पदावनत हैं आप निम्नलिखित का उपयोग कर सकते हैं:

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithWhite:.0f alpha:1.f];
shadow.shadowOffset = CGSizeMake(0, -1);

[[UINavigationBar appearance] setTitleTextAttributes:@{
     NSForegroundColorAttributeName: [UIColor whiteColor],
     NSShadowAttributeName: shadow,
     NSFontAttributeName: [UIFont fontWithName:@"Arial-Bold" size:15.0f]
     }];

1
1 घंटे से अधिक समय तक, मैं ट्यूटोरियल से कोड के उस हिस्से से जूझ रहा था, जो कि पहले पुश के बाद मेरे नेविगेशन आइटम के शीर्षक को क्रॉप करता है ... फ़ॉन्ट आकार के साथ सावधान रहें, जो मेरी स्थिति में समस्या थी ... स्पष्ट रूप से आकार 0.0 ने मेरे लिए काम नहीं किया ...
बार्टू

3
नया शब्दकोश शाब्दिक यह एक बहुत सुंदर बना देगा
tybro0103

बस एक साइड नोट के रूप में यह 5.0+ ही है, यदि आप 4 को सपोर्ट कर रहे हैं तो यह if ([navBarInstance respondsToSelector:@selector(appearance)])पहले करने लायक है क्योंकि यह 5. से नीचे के iOS वर्जन को क्रैश कर देगा
एडम वेट

1
फॉन्ट नाम गलत है और ऐप को क्रैश कर देता है। एरियल-बोल्डएमटी जैसी कुछ कोशिश करें।
मैकमार

17
TIL UITextAttributeTextColorको NSForegroundColorAttributeNameiOS 7
Brenden

23

IOS 6 से अधिक या उसके बराबर परिनियोजन लक्ष्य के लिए, आपको NSShadowइसके बजाय उपयोग करना चाहिए :

NSShadow * shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor lightGrayColor];
shadow.shadowOffset = CGSizeMake(0, -2);

NSDictionary * navBarTitleTextAttributes =
@{ NSForegroundColorAttributeName : [UIColor redColor],
   NSShadowAttributeName          : shadow,
   NSFontAttributeName            : [UIFont systemFontOfSize:14] };

[[UINavigationBar appearance] setTitleTextAttributes:navBarTitleTextAttributes];

यहां छवि विवरण दर्ज करें


19

IOS 8+ और स्विफ्ट में ऐसा करना। वहाँ setTitleTextAttributesउपस्थिति वस्तु के लिए नहीं है । इसके बजाय, यह करें:

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : AppTheme.fontWithSize(18)]

5

मैंने AppDelegate.m वर्ग didFinishLaunchingWithOptions विधि में कोड की कुछ पंक्तियों को जोड़कर ऐसा किया: इस कोड का उपयोग करें:

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                           [UIColor colorWithRed:255.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0],UITextAttributeTextColor,
                                           [UIColor clearColor], UITextAttributeTextShadowColor,
                                           [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

इससे मेरा काम बनता है...


5

यदि आपको स्विफ्ट में ऐसा करने की आवश्यकता है, तो आप इन सेटिंग्स को प्राप्त करने या सेट करने की अनुमति देने के लिए UINavigationBar के लिए एक एक्सटेंशन बना सकते हैं।

extension UINavigationBar {
var titleColor: UIColor? {
    get {
        if let attributes = self.titleTextAttributes {
            return attributes[NSForegroundColorAttributeName] as? UIColor
        }
        return nil
    }
    set {
        if let value = newValue {
            self.titleTextAttributes = [NSForegroundColorAttributeName: value]
        }
    }
}

var titleFont: UIFont? {
    get {
        if let attributes = self.titleTextAttributes {
            return attributes[NSFontAttributeName] as? UIFont
        }
        return nil
    }
    set {
        if let value = newValue {
            self.titleTextAttributes = [NSFontAttributeName: value]
        }
    }
    }
}

आप इस तरह रंग और फ़ॉन्ट सेट कर सकते हैं:

navigationBar.titleColor = UIColor.redColor()
navigationBar.titleFont = UIFont.systemFontOfSize(12)

मुझे लगता है कि यह समाधान काम करता है यदि आप titleColorया तो titleFontव्यक्तिगत रूप से उपयोग करते हैं । यदि आप उन्हें एक साथ उपयोग करते हैं, तो self.titleTextAttributesहर बार एक नया मान सेट किया जाएगा जिसे चर कहा जाता है। नया शब्दकोश बनाने पर सेटर को संभवतः दूसरा मूल्य मिल सकता है।
user023

1

यह एक वैश्विक सेटिंग के बजाय एकल नेविगेशनबार पर एक कस्टम दृश्य सेट करने के लिए इस्तेमाल किया जा सकता है

- (void)updateTitleWithString:(NSString *)title
{
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectZero];
    [headerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    [headerView setAutoresizesSubviews:YES];

    CGFloat headFontSize = (IS_SYSTEM_DEVICE_IPAD ? 25.0f : 19.0f);
    UIFont *headFont = [UIFont boldSystemFontOfSize: headFontSize ];

    NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [style setLineBreakMode:NSLineBreakByTruncatingTail];

    CGSize size = [title boundingRectWithSize:CGSizeMake(190,headFontSize + 6) options:NSStringDrawingUsesLineFragmentOrigin
                                   attributes:@{NSFontAttributeName : headFont, NSParagraphStyleAttributeName : style} context:nil].size;

    headerView.frame  = CGRectMake(0, 0,size.width,self.navigationController.navigationBar.frame.size.height);
    float labelHeight = headFontSize + 6;
    float labelYLoc   = (   self.navigationController.navigationBar.frame.size.height - labelHeight ) / 2;
    UILabel *label    = [[UILabel alloc] initWithFrame:CGRectMake(0,labelYLoc, size.width,labelHeight)];
    label.backgroundColor = [UIColor clearColor];
    label.adjustsFontSizeToFitWidth = YES;
    label.textAlignment = NSTextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    label.font = headFont;
    label.text = title;
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.4];
    label.lineBreakMode = NSLineBreakByTruncatingTail;
    label.shadowOffset = CGSizeMake(0,-1);
    label.accessibilityLabel = @"<LABEL>";
    [headerView addSubview:label];

    self.navigationItem.titleView = headerView;
}

-5

कोड की इस लाइन का उपयोग करें

UILabel *badge_Label=[[UILabel alloc]initWithFrame:CGRectMake(5,3, 15, 15)];
badge_Label.backgroundColor=[UIColor redcolor];
badge_Label.font=[UIFont systemFontOfSize:12];
[badge_Label setText:@"20"];
[self.navigationController.navigationBar addSubview:badgelabel];

मुझे लगता है कि यह आपके लिए मददगार होगा।


मुझे पता है, मैं
बजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.