IOS 7 पारभासी UINavigationBar के लिए उज्ज्वल, उज्ज्वल रंग प्राप्त करना


172

iOS 7.1 अद्यतन : UINavigationBar में अल्फा चैनल को संशोधित करने के लिए समाधान की तरह दिखता है इस अद्यतन में नजरअंदाज कर दिया गया है। अभी, सबसे अच्छा समाधान सिर्फ 'इसके साथ सौदा करना' प्रतीत होता है और आशा है कि आप जो भी रंग चुनते हैं वह एक पारभासी प्रभाव प्रदान कर सकते हैं। मैं अभी भी इसके आसपास होने के तरीकों को देख रहा हूं।


iOS 7.0.3 अद्यतन : हमारे द्वारा बनाई गई GitHub लाइब्रेरी को iOS 7.0.3 का उपयोग करते समय इस मुद्दे के आसपास थोड़ा काम करने के लिए अद्यतन किया गया है। दुर्भाग्य से, आईओएस 7.0.2 और इससे पहले और आईओएस 7.0.3 में बनाए गए दोनों रंगों का समर्थन करने के लिए कोई जादू फार्मूला नहीं है। लगता है जैसे Apple ने संतृप्ति में सुधार किया, लेकिन अपारदर्शिता की कीमत पर (चूंकि धुंधला पारभासी अपारदर्शिता स्तर पर निर्भर है)। मैं, कुछ अन्य लोगों के साथ मिलकर इसके लिए एक बेहतर समाधान बनाने पर काम कर रहा हूं।


मुझे यकीन है कि बहुत से लोग पहले से ही समस्या में आ गए हैं जहां iOS 7 एक UINavigationBar के रंग को असंतृप्त करने के लिए जाता है जो पारभासी है।

मेरा लक्ष्य इस रंग के साथ एक UINavigationBar हासिल करना है, लेकिन पारभासी:

UinavigationBar, अपारदर्शी

हालाँकि, पारभासी के साथ, मुझे यह मिल रहा है। पृष्ठभूमि का दृश्य सफेद है, जिसे मैं समझता हूं कि यह दृश्य थोड़ा हल्का होगा:

UINavigationBar, पारभासी

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

Facebook UINavigationBar, पारभासी

..तो मुझे पता है कि कोई रास्ता है। पृष्ठभूमि के दृश्य स्पष्ट रूप से यहाँ अंतर करते हैं, लेकिन उनकी अधिकांश सामग्री भी ग्रे / सफेद है। ऐसा लगता है कि आप जो भी बार टिंट रंग डालते हैं, उसकी परवाह किए बिना, आप पारभासी रंग के तहत ज्वलंत रंग प्राप्त करने में असमर्थ हैं।

समाधान के साथ अद्यतन किया गया।

यहाँ समाधान है कि मैं अंत के साथ आ रहा है। मैंने aprato का समाधान लिया और फिर उपवर्ग के UINavigationBarभीतर रिवाज को शामिल किया UINavigationControllerमैंने एक रिपॉजिटरी बनाई है जिसमें इस कार्यान्वयन को नीचे सूचीबद्ध किया गया है, एक उदाहरण ऐप के साथ

////////////////////////////
// CRNavigationBar.m
////////////////////////////

#import "CRNavigationBar.h"

@interface CRNavigationBar ()
@property (nonatomic, strong) CALayer *colorLayer;
@end

@implementation CRNavigationBar

static CGFloat const kDefaultColorLayerOpacity = 0.5f;
static CGFloat const kSpaceToCoverStatusBars = 20.0f;

- (void)setBarTintColor:(UIColor *)barTintColor {
    [super setBarTintColor:barTintColor];
    if (self.colorLayer == nil) {
        self.colorLayer = [CALayer layer];
        self.colorLayer.opacity = kDefaultColorLayerOpacity;
        [self.layer addSublayer:self.colorLayer];
    }
    self.colorLayer.backgroundColor = barTintColor.CGColor;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    if (self.colorLayer != nil) {
        self.colorLayer.frame = CGRectMake(0, 0 - kSpaceToCoverStatusBars, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + kSpaceToCoverStatusBars);

        [self.layer insertSublayer:self.colorLayer atIndex:1];
    }
}

@end

////////////////////////////
// CRNavigationController.m
////////////////////////////

#import "CRNavigationController.h"
#import "CRNavigationBar.h"

@interface CRNavigationController ()

@end

@implementation CRNavigationController

- (id)init {
    self = [super initWithNavigationBarClass:[CRNavigationBar class] toolbarClass:nil];
    if(self) {
        // Custom initialization here, if needed.    
    }
    return self;
}

- (id)initWithRootViewController:(UIViewController *)rootViewController {
    self = [super initWithNavigationBarClass:[CRNavigationBar class] toolbarClass:nil];
    if(self) {
        self.viewControllers = @[rootViewController];
    }

    return self;
}

@end

Facebook iOS7 UINAvigationBarअपारदर्शी नहीं है?
विनजेज़

नहींं, यह एक बहुत अधिक सूक्ष्म पारदर्शिता तो डिफ़ॉल्ट आईओएस है। बहुत बेहतर, आई.एम.ओ.
केविन

फेसबुक नेविगेशनबार पारदर्शी नहीं है
LE SANG

7
यह निश्चित रूप से पारभासी है; कृपया मेरी संपादित प्रतिक्रिया देखें।
स्पेसपायरो

2
@ ओडली - यह सही रंगों को प्राप्त करने के लिए एक समाधान नहीं है, बल्कि UINavigationBarआईओएस 7 में पारभासी के संपर्क में आने पर जितना संभव हो उतना हल्कापन को ठीक करने के लिए एक समाधान है
स्पेसपीरो

जवाबों:


52

iOS 7.0.3 अपडेट: जैसा कि आप ऊपर देख रहे हैं 7.0.3 परिवर्तित चीजें। मैंने अपना जिस्ट अपडेट किया है। उम्मीद है कि लोगों के उन्नयन के रूप में यह बस दूर चला जाएगा।

मूल उत्तर: मैंने अन्य उत्तरों में से दो के एक हैक संयोजन के साथ समाप्त किया। मैं UINavigationBar को उपवर्गित कर रहा हूं और यदि कोई भी विभिन्न ऊंचाई की स्थिति वाली बार हैं तो कवर करने के लिए कुछ अतिरिक्त स्थान के साथ एक परत को पीछे जोड़ रहा है। जब भी आप barTintColor सेट करते हैं, तो लेयर लेआउट सबव्यू में समायोजित हो जाता है और रंग बदल जाता है।

Gist: https://gist.github.com/aprato/6631390

setBarTintColor

  [super setBarTintColor:barTintColor];
  if (self.extraColorLayer == nil) {
    self.extraColorLayer = [CALayer layer];
    self.extraColorLayer.opacity = self.extraColorLayerOpacity;
    [self.layer addSublayer:self.extraColorLayer];
  }
  self.extraColorLayer.backgroundColor = barTintColor.CGColor;

layoutSubviews

  [super layoutSubviews];
  if (self.extraColorLayer != nil) {
    [self.extraColorLayer removeFromSuperlayer];
    self.extraColorLayer.opacity = self.extraColorLayerOpacity;
    [self.layer insertSublayer:self.extraColorLayer atIndex:1];
    CGFloat spaceAboveBar = self.frame.origin.y;
    self.extraColorLayer.frame = CGRectMake(0, 0 - spaceAboveBar, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + spaceAboveBar);
  }

आपने ViewController पर इसे कहां लागू किया? ViewDidLoad के तहत?
जेरेमी

यह खूबसूरती से काम करता है! मैंने इसे अपने UINavigationControllerउपवर्ग में जोड़ने का फैसला किया । यहाँ उन लोगों के लिए इसका सार है जो एक के UINavigationBarभीतर एक प्रथा होने में रुचि रखते हैं UINavigationController
स्पेसपायरो

SpaceJyro की तरह @ जेरेमी मेरे पास एक नौसेना नियंत्रक उपवर्ग है (जो कि बार की तरह मैं UIAppearance लक्ष्यीकरण के लिए पूर्व 7 का उपयोग कर रहा था) जो initWithRootViewControllerइसे उपयोग करने के लिए ओवरराइड करता है। मैंने अपना जिस्ट
एंथनी

उम ... ठीक है..मुझे लगता है कि मुझे पूरी परीक्षा परियोजना में यह देखने की जरूरत है कि आपको क्या मतलब है। मैं नीचे दिए गए समय के उदाहरण को दोहराने में सक्षम था, लेकिन मैं अभी भी इस के साथ थोड़ा हरा हूं।
जेरेमी

1
@ मिस्टर थैंक्स! जब मैंने लिखा था कि यह अभी तक जोर नहीं दे रहा था :) लेकिन मैंने इसे अभी अपडेट किया है, NSCoding के लिए अपारदर्शिता और समर्थन के लिए UIAppearance को जोड़ा
एंथनी

10

IOS 7.0 पर बार के लिए tintColor का व्यवहार बदल गया है। यह अब बार की पृष्ठभूमि को प्रभावित नहीं करता है और UIView में जोड़े गए टिंटकलर संपत्ति के लिए वर्णित व्यवहार करता है। बार की पृष्ठभूमि को टिंट करने के लिए, कृपया -barTintColor का उपयोग करें। आप ios6 और ios7 दोनों के साथ ऐप को काम करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं।

if(IS_IOS7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}

IS_IOS7 एक मैक्रो है जिसे निम्नानुसार pch फ़ाइल में परिभाषित किया गया है।

#define IS_IOS7 ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0)

9

मैं इस समाधान के साथ नहीं आया था लेकिन यह काफी अच्छी तरह से काम करता है। मैंने इसे सिर्फ UINavigationController के अपने उपवर्ग पर देखने के लिए जोड़ा।

स्रोत: https://gist.github.com/alanzeino/6619253

// cheers to @stroughtonsmith for helping out with this one

UIColor *barColour = [UIColor colorWithRed:0.13f green:0.14f blue:0.15f alpha:1.00f];
UIView *colourView = [[UIView alloc] initWithFrame:CGRectMake(0.f, -20.f, 320.f, 64.f)];
colourView.opaque = NO;
colourView.alpha = .7f;
colourView.backgroundColor = barColour;
self.navigationBar.barTintColor = barColour;
[self.navigationBar.layer insertSublayer:colourView.layer atIndex:1];

1
ऐसा लगता है कि नेविगेशन कंट्रोलर पर एक नए व्यू कंट्रोलर को पुश करने के बाद, किसी भी बार बटन आइटम को इस पारदर्शिता परत के तहत स्थानांतरित किया जा सकता है।
इवान डेविस

इस पारदर्शिता परत से शीर्षक भी अस्पष्ट हो जाते हैं।
निक लॉकिंग

मैंने यह जुमला लिखा है। टिप्पणियाँ सही हैं; जब नया व्यू कंट्रोलर पुश किया जाता है तो या तो बटन आइटम को नीचे की ओर धकेल दिया जाता है, या सबलेयर्स अल्फा के विरासत में मिलते हैं colourView। मैंने अन्य उत्तर को छोड़ दिया और कुछ चीजों को एक नए ड्रॉप-क्लास में तय किया: github.com/alanzeino/AZColoredNavigationBar
एलन ज़ीनो

मैं ट्रांसलूसेंट ब्लैक नेविगेशन बार शैली का चयन करके पाठ को सफेद करने में सक्षम था ... इसने मेरे लिए चाल चली। अपनाBar.tintColor = [UIColor whiteColor] भी सेट करें; शीर्ष पर अन्य कस्टम बटन के लिए।
जुआन ज़मोरा

6

एक लो-फाई रास्ता संभवतः पिनिंग होगा UIViewजो बार के पीछे व्यू के शीर्ष पर नेविगेशन बार की ऊंचाई है। उस दृश्य को नेविगेशन पट्टी के समान रंग दें, लेकिन इच्छित प्रभाव प्राप्त होने तक अल्फा के साथ खेलें:

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.navigationController.navigationBar.frame), 64)];
    backgroundView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:1 alpha:.5];

[self.navigationController.view insertSubview:backgroundView belowSubview:self.navigationController.navigationBar];

UIView पीछे

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

(पारदर्शिता पर जोर देने के लिए निम्न उदाहरणों से परिवर्तित रंग। आंदोलन में होने पर पारदर्शिता / धुंधलापन अधिक ध्यान देने योग्य है।)

सबक्लासिंग UINavigationBarऔर पृष्ठभूमि के ऊपर एक ही दृश्य रखना लेकिन बाकी सब के पीछे शायद कम हैकी होने के दौरान समान परिणाम प्राप्त होंगे।


एक और उपाय जो मैंने देखा है, वह चारों ओर उछाला गया है UINavigationBar:

self.navigationController.navigationBar.alpha = 0.5f;

संपादित करें: वास्तव में, परीक्षण के बाद ऐसा लगता है कि यह इरादा व्यवहार (या कोई व्यवहार) प्रदान नहीं करता है:

.8 अल्फ़ा

.8 अल्फा के साथ नेविगेशन बार

अन्यायपूर्ण अल्फ़ाज़

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

जाहिर है, आप केवल iOS 7 उपकरणों पर ऐसा करना चाहेंगे। इसलिए, इनमें से कोई भी लागू करने से पहले कुछ संस्करण की जाँच करें


मैं उस रंग को पाने के लिए अल्फा और टिंटकलर को अपडेट करने के लिए दूसरा दृष्टिकोण रखता हूं जिसे आप ढूंढ रहे हैं।
स्टुअर्टम

यदि आप उस कम आक्रामक तरीके से वांछित प्रभाव प्राप्त कर सकते हैं, तो पूरी तरह से। लेकिन मुझे यकीन नहीं है कि यह कितना प्रभावी होगा।
केविन

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

वूप्स, अब मैं देख रहा हूं। होना चाहिए[self.navigationController.view insertSubview:backgroundView belowSubview:self.navigationController.navigationBar];
केविन

हाँ, मुझे लगा कि आपका क्या मतलब है। ;) यह निश्चित रूप से मुझे लेने के लिए रंगों का एक बेहतर समय देता है। मूल रंग की जीवंतता प्राप्त करना संभवत: यह देखते हुए असंभव होगा कि धब्बा प्रभाव अभी भी वास्तव में इसके तहत कुछ भी desaturates। मुझे अभी के लिए गहरे रंग के साथ रहना होगा।
स्पेसपायरो

4

RGB फॉर्मेट में अपनी UIColor ऑब्जेक्ट बनाने के बजाय , HSB का उपयोग करें और संतृप्ति पैरामीटर बढ़ाएं। ( इस विधि का वर्णन करने वाले सैम सोफ़े को श्रेय )

navigationBar.barTintColor = [UIColor colorWithHue:0.555f saturation:1.f brightness:0.855f alpha:1.f];

नोट: यह समाधान एक ट्रेडऑफ़ है और उच्च संतृप्ति वाले रंगों के लिए अच्छी तरह से काम नहीं करता है।

अपने डिजाइन से एचएसबी रंग लेने के लिए आप एक उपकरण का उपयोग कर सकते हैं ColorSnapper जो आपको केवल UIColor HSB प्रारूप की प्रतिलिपि बनाने की अनुमति देता है।

आप मौजूदा रंगों को संशोधित करने के लिए डेविड कीगन से UIColor श्रेणी ( GitHub Link ) को भी आज़मा सकते हैं ।


3

इस समस्या को अब Apple ने नए 7.0.3 रिलीज में ठीक कर दिया है।


1
हां, उनका टिंट रंग कार्यान्वयन 7.0.3 में निश्चित रूप से बदल गया है। मैं अब केवल 10-15% तक संतृप्ति को टक्कर देकर अपना वांछित रंग प्राप्त कर सकता हूं। इससे पहले कि मुझे अतिरिक्त परत का विज्ञापन करने की भी जरूरत पड़े।
मतेज बुकोविंस्की

मुझे बताने के लिए धन्यवाद! मैं इसके लिए अपनी लाइब्रेरी को अपडेट करने पर जोर दूंगा।
स्पेसपायरो

1
और 7.1> _ <
लियो नटन

1

मैं @ aprato के समाधान के लिए इस्तेमाल किया लेकिन कुछ ही कोने मामलों में जहां नई VC के से नई परतें (जैसे। पाया UINavigationItemButtonViews, UINavigationItemViews, आदि) स्वचालित रूप से नीचे एक स्थान में डाला जा होगा extraColorLayer(जो कारण होगा उन शीर्षक या बटन तत्वों से प्रभावित हो रहे extraColorLayerहैं और इस प्रकार रंग में बेहोशी की तुलना में वे सामान्य रूप से होंगे)। इसलिए मैंने @ aprato के समाधान को extraColorLayerअनुक्रमणिका स्थिति पर रहने के लिए मजबूर किया । 1. अनुक्रमणिका स्थिति 1 पर, extraColorLayerइसके ठीक ऊपर रहता है _UINavigationBarBackground, लेकिन बाकी सब कुछ नीचे।

यहाँ मेरा वर्ग कार्यान्वयन है:

- (void)setBarTintColor:(UIColor *)barTintColor
{
    [super setBarTintColor:barTintColor];
    if (self.extraColorLayer == nil)
    {
        self.extraColorLayer = [CALayer layer];
        self.extraColorLayer.opacity = kDefaultColorLayerOpacity;
        [self.layer insertSublayer:self.extraColorLayer atIndex:1]; // This way the text comes out clear
    }
    self.extraColorLayer.backgroundColor = barTintColor.CGColor;
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    if (self.extraColorLayer != nil)
    {
        self.extraColorLayer.frame = CGRectMake(0, 0 - kSpaceToCoverStatusBars, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + kSpaceToCoverStatusBars);
    }
}

- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview
{
    [super insertSubview:view aboveSubview:siblingSubview];
    [self.extraColorLayer removeFromSuperlayer];
    [self.layer insertSublayer:self.extraColorLayer atIndex:1]; // This way the text comes out clear
}

- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index
{
    [super insertSubview:view atIndex:index];
    [self.extraColorLayer removeFromSuperlayer];
    [self.layer insertSublayer:self.extraColorLayer atIndex:1]; // This way the text comes out clear
}

- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview
{
    [super insertSubview:view belowSubview:siblingSubview];
    [self.extraColorLayer removeFromSuperlayer];
    [self.layer insertSublayer:self.extraColorLayer atIndex:1]; // This way the text comes out clear
}

चूंकि परतें और साक्षात्कार मिश्रित नहीं होते हैं, इसलिए मैं अतिभार जोड़ रहा हूं। आवश्यक नहीं है
रोब वैन डेर वीर

1

मैंने अपने कोड को अपने कांटे में सुधार लिया है: https://github.com/allenhsu/CRNavigationController

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


@JordanBrown ने 7.1 & 8 पर परीक्षण नहीं किया
एलन ह्यू

0

इनमें से किसी भी हैक की आवश्यकता नहीं है :)। बस सेट:

self.navigationController.navigationBar.translucent = NO;

IOS 7 के लिए, डिफ़ॉल्ट ट्रांसलेंसी को TRUE पर रखा गया है।


17
लेकिन सवाल के रूप में अच्छी तरह से पारभासी की आवश्यकता है।
सिंह नटण

:) धन्यवाद, यह मेरे लिए काम किया। हालाँकि नेवी बार के नीचे 1px ब्लैक बॉटम बॉर्डर है। क्या इसे हटाने का कोई तरीका है?
प्रीतेश देसाई

0

संबंधित नोट पर, आप अपना शीर्षक पाठ रंग (छाया के साथ) आसानी से सेट कर सकते हैं:

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowOffset = CGSizeMake(0.0f, -1.0f);
titleShadow.shadowColor = [UIColor blackColor];
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor],
                                            NSShadowAttributeName: titleShadow};
[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

1
यदि आप iOS 7 की शैली से मेल खाने की कोशिश कर रहे हैं, तो आपके शीर्षक पाठ पर एक ड्रॉप शैडो का उपयोग करना संभवतः अनुचित है।
निक लॉकिंग

आप सही हैं, iOS 7 में Apple अब अपने नेबर टेक्स्ट पर छाया नहीं लगा रहा है। यदि आप एक कस्टम लुक चाहते हैं, तो यह आपको विकल्प देगा।
bryguy1300

0

आईओएस 7 पर पारदर्शिता के साथ एक समान रूप से रंगीन नेविगेशन बार सेटअप करने की कोशिश करते हुए मैं इस क्यू / ए के पार आया।

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

UIImage *singlePixelImage = [UIImage imageNamed:@"singlePixel.png"];
UIImage *resizableImage = [singlePixelImage resizableImageWithCapInsets:UIEdgeInsetsZero];
[navigationBar setBackgroundImage:resizableImage forBarMetrics:UIBarMetricsDefault]; 

कोड की तीन लाइनें, बहुत ही सरल और iOS 6 और iOS 7 पर BOTH काम करता है (barTintColor iOS 6 पर असमर्थित है)।


0

यहाँ GitHub में उपलब्ध साइमन बूथ से उपलब्ध एक महान Dropin UinavigationController प्रतिस्थापन है GitHub - C360NavigationBar

यदि आप iOS6 को बैकवर्ड सपोर्ट कर रहे हैं तो रूट व्यू कंट्रोलर पर एक चेक करें जैसे:

PatientListTableViewController * frontViewController = [[PatientListTableViewController आवंटन] init];

    UINavigationController *navViewController = [[UINavigationController alloc] initWithNavigationBarClass:[C360NavigationBar class] toolbarClass:nil];
if ([navViewController.view respondsToSelector:@selector(setTintColor:)]) {
    //iOS7
    [navViewController.view setTintColor:self.navBarTintColor];
    [[C360NavigationBar appearance] setItemTintColor:self.navBarItemTintColor];
} else {
    //iOS6
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    navViewController.navigationBar.tintColor = self.navBarTintColor;
}
[navViewController pushViewController:frontViewController animated:NO];

self.window.rootViewController = navViewController;

जब तक मैं कुछ याद नहीं कर रहा हूँ, इस पुस्तकालय की पट्टियाँ पारभासी नहीं हैं।
रिवरना

0

जैसा कि @bernhard ऊपर उल्लेख किया गया है वांछित नेविगेशन बार उपस्थिति प्राप्त करने के लिए बार टिंट रंग को संतृप्त करना संभव है।

मैंने उस तरह के समायोजन के लिए एक BarTintColorOptimizer उपयोगिता लिखी । यह बार के वास्तविक रंग को आईओएस 7.x और बाद में वांछित रंग से मेल करने के लिए पारदर्शी बार टिंट रंग का अनुकूलन करता है। देखो इस उत्तर जानकारी के लिए।


-1

सच कहूं, तो उपरोक्त उत्तर सही हो सकते हैं, लेकिन निम्नलिखित चाल ने मेरे लिए बहुत आसानी से काम किया।

// this is complete 100% transparent image
self.imageBlack = [[UIImage imageNamed:@"0102_BlackNavBG"] 
           resizableImageWithCapInsets:UIEdgeInsetsMake(0, 2, 0, 2)  
                          resizingMode:UIImageResizingModeStretch];

// this is non-transparent but iOS7 
// will by default make it transparent (if translucent is set to YES)
self.imageRed = [[UIImage imageNamed:@"0102_RedNavBG"] 
         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 2, 0, 2)  
                        resizingMode:UIImageResizingModeStretch];

// some navigation controller
[nvCtrLeft.navigationBar setBackgroundImage:self.imageRed 
                              forBarMetrics:UIBarMetricsDefault];

// some another navigation controller
[nvCtrCenter.navigationBar setBackgroundImage:self.imageRed 
                                forBarMetrics:UIBarMetricsDefault];

यहाँ छवियों के लिए उपयोग किया जाता है self.imageRedऔर self.imageBlack

< self.imageBlack> काले रंग की छवि इस कोष्ठक में दिखाई नहीं देगी क्योंकि यह पारदर्शी है :)

< self.imageRed> लाल छवि इस कोष्ठक में है।


यह आपको धुंधला नहीं देता है।
ऑर्टविन Gentz

-1

UINavigationBar को उप-लिंक किए बिना @aprato समाधान का उपयोग करने का एक तरीका है।

मेरी परियोजना में मेरा मुख्य विचार एक UIViewController है।

समस्या यह है कि नेविगेशनकंट्रोलर एक आसानी से संपत्ति है, क्या आपको मेरी परियोजना के साथ वर्ग का उपयोग करने का एक तरीका है क्योंकि मैं नहीं कर सकता: [[UINavigationController alloc] initWithNavigationBarClass:

धन्यवाद


तुम सिर्फ UIViewControllerएक के UINavigationControllerसाथ अपने अंदर लपेट नहीं सकता [[[UINavigationController alloc] initWithRootViewController:<YourViewController>]? यहां पोस्ट करने के बजाय एक अलग प्रश्न के रूप में इसका बेहतर उत्तर दिया जा सकता है।
स्पेसपायरो

-2

जिस रंग को आप चाहते हैं उसका उपयोग करने का एक आसान तरीका है

    [<NAVIGATION_BAR> setBackgroundImage:<UIIMAGE> forBarPosition:<UIBARPOSITION> barMetrics:<UIBARMETRICS>];

जब तक आपकी छवि में कुछ अल्फ़ाज़ हैं, ट्रांसलूसेंसी काम करेगी और आप इमेज को बदलकर अल्फ़ा सेट कर सकते हैं। यह सिर्फ iOS7 में जोड़ा गया था। छवि के लिए चौड़ाई और ऊंचाई ऊर्ध्वाधर के लिए 640x88px है (यदि आप इसे स्थिति पट्टी के नीचे चाहते हैं तो 20 से 88 को जोड़ दें)।


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