UITabBar का रंग / पृष्ठभूमि रंग बदलना


87

UINavigationBar और UISearchBar दोनों में एक tintColor संपत्ति है जो आपको उन दोनों वस्तुओं के रंग (आश्चर्य, मुझे पता है) को बदलने की अनुमति देता है। मैं अपने आवेदन में UITabBar की तरह ही काम करना चाहता हूं, लेकिन अब इसे डिफ़ॉल्ट काले रंग से बदलने का तरीका मिल गया है। कोई विचार?


ये शानदार जवाब हैं। यदि आप ऑटोरोटेशन की अनुमति दे रहे हैं, तो लचीले मार्जिन और आकार के लिए सबव्यू के ऑटोरेस्पोन्डिंग मास्क को सेट करना मददगार है, या टैब बार के साथ नई पृष्ठभूमि का आकार परिवर्तन नहीं होगा।
pmjj

जवाबों:


47

मैं एक UITabBarController उप-वर्ग का उपयोग करके और निजी कक्षाओं का उपयोग करके इसे बनाने में सक्षम रहा हूं:

@interface UITabBarController (private)
- (UITabBar *)tabBar;
@end

@implementation CustomUITabBarController


- (void)viewDidLoad {
    [super viewDidLoad];

    CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    [v setBackgroundColor:kMainColor];
    [v setAlpha:0.5];
    [[self tabBar] addSubview:v];
    [v release];

}
@end

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

क्या यह एक निजी एपीआई है? अगर मैंने अपने ऐप में इसका इस्तेमाल किया तो क्या मुझे मना कर दिया जाएगा?
फ्रैंक

वहाँ कोई भी निजी कॉल नहीं दिखाई देता है
एंथनी मेन

वर्जित संपत्ति सुलभ नहीं थी।
coneybeare

यह टैब्बर पृष्ठभूमि को संशोधित करता है, न कि "चयनित आइटम" हाइलाइट, जिसे मैं अधिक रुचि रखता
हूं

105

iOS 5 ने अधिकांश UI तत्वों के लुक को अनुकूलित करने के लिए कुछ नए रूप प्रदर्शित किए हैं।

आप अपने ऐप में UITabBar के हर उदाहरण को उपस्थिति प्रॉक्सी का उपयोग करके लक्षित कर सकते हैं।

IOS 5 + 6 के लिए:

[[UITabBar appearance] setTintColor:[UIColor redColor]];

IOS 7 और इसके बाद के संस्करण के लिए, कृपया निम्नलिखित का उपयोग करें:

[[UITabBar appearance] setBarTintColor:[UIColor redColor]];

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

UIColor *tintColor; // iOS 5+6
UIColor *barTintColor; // iOS 7+
UIColor *selectedImageTintColor;
UIImage *backgroundImage;
UIImage *selectionIndicatorImage;

3
नहीं। जैसा कि मैंने बताया, वे iOS 5 के लिए हैं। आप सशर्त संकलन कथनों के साथ हमेशा विशिष्ट संस्करणों को लक्षित कर सकते हैं: cocoawithlove.com/2010/07/…
imnk

धन्यवाद, यह उपयोगी था :) कभी नहीं पता था कि ऐसी कोई चीज थी।
वीरू

IOS 7 के लिए, [UITabBar उपस्थिति] setBarTintColor का उपयोग करें, यदि आप पृष्ठभूमि का रंग बदलना चाहते हैं
Zeezer

34

मेरे पास अंतिम उत्तर के लिए एक परिशिष्ट है। जबकि आवश्यक योजना सही है, आंशिक रूप से पारदर्शी रंग का उपयोग करने की चाल में सुधार किया जा सकता है। मुझे लगता है कि यह केवल डिफ़ॉल्ट ढाल के माध्यम से दिखाने के लिए है। ओह, भी, TabBar की ऊंचाई 48 के बजाय 49 पिक्सेल है, कम से कम OS 3 में।

इसलिए, यदि आपके पास एक ढाल के साथ एक उपयुक्त 1 x 49 छवि है, तो यह देखने का संस्करण है जिसे आपको उपयोग करना चाहिए:

- (void)viewDidLoad {

    [super viewDidLoad]; 

    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    UIImage *i = [UIImage imageNamed:@"GO-21-TabBarColorx49.png"];
    UIColor *c = [[UIColor alloc] initWithPatternImage:i];
    v.backgroundColor = c;
    [c release];
    [[self tabBar] addSubview:v];
    [v release];

}

1
यदि आप इसे एक पृष्ठभूमि चित्र के साथ सुंदर बनाना चाहते हैं, तो इसे देखें: duivesteyn.net/2010/01/16/iphone-custom-tabbar-background-image
oberbaum

1
मुझे लगता है कि यह होना चाहिए: [[आत्म tabBar] सम्मिलित करें: साक्षात्कार: v atIndex: 0];
विभोर गोयल

मुझे पता है कि उत्तर पुराना है लेकिन यह मेरे लिए काम कर रहा है। चूँकि मुझे एक रंग के बजाय एक कस्टम छवि की आवश्यकता थी, इसलिए मैंने आपके उत्तर को इस एक टिंट के
राफेलडीडीएल

27

जब आप सिर्फ addSubview का उपयोग करते हैं तो आपके बटन क्लिक करने की क्षमता खो देंगे, इसलिए इसके बजाय

[[self tabBar] addSubview:v];

उपयोग:

[[self tabBar] insertSubview:v atIndex:0];

7

ऐसा करने का कोई सरल तरीका नहीं है, आपको मूल रूप से UITabBar को उप-वर्ग करने और कस्टम ड्राइंग को लागू करने की आवश्यकता है जो आप चाहते हैं। यह प्रभाव के लिए काफी काम का है, लेकिन यह इसके लायक हो सकता है। मैं इसे भविष्य के iPhone एसडीके में जोड़ने के लिए Apple के साथ एक बग फाइल करने की सलाह देता हूं।


4
सर, क्या आपने सेब से बग भरा है?
सागर आर। कोठारी

7

इसके लिए सही समाधान निम्नलिखित है। यह मेरे साथ iOS5 और iOS4 के लिए ठीक काम करता है।

//---- For providing background image to tabbar
UITabBar *tabBar = [tabBarController tabBar]; 

if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
    // ios 5 code here
    [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
} 
else {
    // ios 4 code here
    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
    UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
    UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
    tabbg_view.backgroundColor = tabbg_color;
    [tabBar insertSubview:tabbg_view atIndex:0];
}

tabBarcontroller क्या है यह नियंत्रक है जो UITabarDelegate के अनुरूप है क्या आप plz समझा सकते हैं?
iCoder

7

IOS 7 पर:

[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:(38.0/255.0) green:(38.0/255.0) blue:(38.0/255.0) alpha:1.0]];

मैं आपकी दृश्य इच्छाओं के आधार पर सबसे पहले सेटिंग करने की सलाह देता हूं:

[[UITabBar appearance] setBarStyle:UIBarStyleBlack];

बार शैली आपके दृश्य सामग्री और आपके टैब बार के बीच एक सूक्ष्म विभाजक रखती है।



5

मेरे लिए इसके बहुत ही सरल रूप में तबर का रंग बदलना है: -

[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]];


[self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];

इसे इस्तेमाल करे!!!


अच्छा कर रहा है! यू के लिए +1।
वाईएसआर फैन

3
 [[UITabBar appearance] setTintColor:[UIColor redColor]];
 [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];

2

सिर्फ पृष्ठभूमि रंग के लिए

Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];

या अनुप्रयोग प्रतिनिधि में

[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];

टैब्बर के अचयनित आइकनों के रंग बदलने के लिए

IOS 10 के लिए:

// this code need to be placed on home page of tabbar    
for(UITabBarItem *item in self.tabBarController.tabBar.items) {
    item.image = [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}

IOS 10 से ऊपर:

// this need to be in appdelegate didFinishLaunchingWithOptions
[[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];

1

मौजूदा उत्तरों में कुछ अच्छे विचार हैं, कई अलग तरीके से काम करते हैं और जो आप चुनते हैं वह इस बात पर भी निर्भर करेगा कि आप किन उपकरणों को लक्षित करते हैं और किस तरह का लुक प्राप्त करना चाहते हैं। UITabBarजब यह अपनी उपस्थिति को अनुकूलित करने की बात आती है, तो यह बहुत ही अचूक है, लेकिन यहां कुछ और तरकीबें हैं जो मदद कर सकती हैं:

1)। यदि आप एक अधिक फ्लैट देखो के लिए चमकदार उपरिशायी से छुटकारा पाने के लिए देख रहे हैं:

tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background
[tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss

2)। टैबबार बटन पर कस्टम चित्र सेट करने के लिए कुछ ऐसा करें:

for (UITabBarItem *item in tabBar.items){
    [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected];
    [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)];
}

आपकी पसंद की वस्तुएं कहां selectedऔर कहां unselectedहैं UIImage। यदि आप चाहते हैं कि वे एक सपाट रंग के हों, तो मुझे जो सबसे सरल समाधान मिला है UIViewवह वांछित के साथ बनाना है backgroundColorऔर फिर इसे UIImageक्वार्ट्जकोर की मदद से प्रस्तुत करना है। मैं दृश्य की सामग्री के साथ UIViewप्राप्त करने के लिए एक श्रेणी में निम्न विधि का उपयोग करता हूं UIImage:

- (UIImage *)getImage {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]);
    [[self layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

3) अंत में, आप बटन के शीर्षक की स्टाइल को अनुकूलित करना चाह सकते हैं। करना:

for (UITabBarItem *item in tabBar.items){
    [item setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                [UIColor redColor], UITextAttributeTextColor,
                [UIColor whiteColor], UITextAttributeTextShadowColor,
                [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
                [UIFont boldSystemFontOfSize:18], UITextAttributeFont,
            nil] forState:UIControlStateNormal];
}

यह आपको कुछ समायोजन करने देता है, लेकिन फिर भी काफी सीमित है। विशेष रूप से, आप पाठ को बटन के भीतर रखा गया है, जहां स्वतंत्र रूप से संशोधित नहीं कर सकते, और चयनित / अचयनित बटन के लिए अलग-अलग रंग नहीं हो सकते। यदि आप अधिक विशिष्ट पाठ लेआउट क्या करना चाहते हैं, तो बस सेट UITextAttributeTextColorस्पष्ट हो सकता है और में अपने पाठ को जोड़ने के लिए selectedऔर unselectedभाग (2) से छवियों।



0

एक अन्य समाधान (जो एक हैक है) टैबबर्कर्रोलर पर अल्फा को 0.01 पर सेट करना है ताकि यह वास्तव में अदृश्य हो लेकिन अभी भी क्लिक करने योग्य है। फिर अल्फावेद टैबबर्कंट्रोलर के नीचे अपनी कस्टम टैबबार छवि के साथ मेनविंडो नीब के नीचे एक ImageView नियंत्रण सेट करें। तब छवियों को स्वैप करें, जब टैबबार कॉन्ट्रोलर स्विच दृश्य बदलता है, तो रंग या हाइटलाइट बदलें।

हालाँकि, आप '... और' खो देते हैं और कार्यक्षमता को अनुकूलित करते हैं।


0

नमस्ते वहाँ iOS SDK 4 का उपयोग कर रहा हूँ और मैं कोड की सिर्फ दो पंक्तियों के साथ इस समस्या को हल करने में सक्षम था और यह इस तरह से है

tBar.backgroundColor = [UIColor clearColor];
tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];

उम्मीद है की यह मदद करेगा!


0
if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
    // ios 5 code here
    [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
} 
else {
    // ios 4 code here
    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
    UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
    UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
    tabbg_view.backgroundColor = tabbg_color;
    [tabBar insertSubview:tabbg_view atIndex:0];
}

0

स्विफ्ट 3.0 उत्तर: (वैभव गायकवाड़ से)

टैब्बर के अचयनित आइकनों के रंग बदलने के लिए:

if #available(iOS 10.0, *) {
        UITabBar.appearance().unselectedItemTintColor = UIColor.white
    } else {
        // Fallback on earlier versions
        for item in self.tabBar.items! {
            item.image = item.image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        }
}

केवल टेक्स्ट रंग बदलने के लिए:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)

0

अपने AppDelegateनिम्न से उपस्थिति का उपयोग करके स्विफ्ट 3 :

UITabBar.appearance().barTintColor = your_color

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