IOS7 में पारदर्शी UIToolbar या UINavigationBar कैसे आकर्षित करें


88

मैं पूरी तरह से पारदर्शी UIToolbarऔर / या चाहता हूं UINavigationBar। मैंने पूर्व और बाद के आईओएस 5 के लिए सुझाए गए विभिन्न झुकावों की कोशिश की है, लेकिन कोई भी काम नहीं करता है।

IOS 7 में इसे कैसे पूरा किया जा सकता है?


पश्चात के लिए - मैं गलती से self.edgesForExtendedLayout = UIRectEdgeNone का उपयोग कर रहा था, जो उपकरण पट्टी के नीचे फैले हुए दृश्य को रोकता है।
बेन पैकर्ड

जवाबों:


303

स्विफ्ट 3 (iOS 10)

पारदर्शक UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: .any,
                                barMetrics: .default)
self.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)

पारदर्शक UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true

स्विफ्ट <३

पारदर्शक UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: UIBarPosition.Any,
                                barMetrics: UIBarMetrics.Default)
self.toolbar.setShadowImage(UIImage(),
                            forToolbarPosition: UIBarPosition.Any)

पारदर्शक UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true

उद्देश्य सी

पारदर्शक UIToolbar

[self.toolbar setBackgroundImage:[UIImage new]
              forToolbarPosition:UIBarPositionAny
                      barMetrics:UIBarMetricsDefault];
[self.toolbar setShadowImage:[UIImage new]
          forToolbarPosition:UIBarPositionAny];

पारदर्शक UINavigationBar

[self.navigationBar setBackgroundImage:[UIImage new]
                         forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;

विचार-विमर्श

स्थापना translucentके लिए YESनेविगेशन पट्टी पर एक व्यवहार में चर्चा की वजह से, काम कर देता है UINavigationBarप्रलेखन। मैं यहाँ प्रासंगिक अंश की रिपोर्ट करूँगा:

यदि आप इस संपत्ति को YESएक अपारदर्शी कस्टम पृष्ठभूमि छवि के साथ एक नेविगेशन बार पर सेट करते हैं , तो नेविगेशन बार छवि से 1.0 से कम सिस्टम अपारदर्शिता लागू करेगा।


अंतिम परिणाम

अंतिम परिणाम


1
क्या आपने iOS7 पर टूलबार संस्करण के काम की पुष्टि की है? मुझे एक अंधेरे टूलबार और प्रस्तुति पर एक अजीब झिलमिलाहट मिलती है।
बेन पैकर्ड

2
स्क्रीनशॉट iOS 7सिम्युलेटर से है
गैब्रिएल पेट्रोनेला

इसके अलावा, मैं अभी iOS 7 के साथ अपने iPhone 5 पर एक परीक्षण ऐप चलाता हूं और यह उम्मीद के मुताबिक काम करता है।
गैब्रियल पेट्रोनेला

1
अच्छी तरह से किया है, तो कई गलत / बुरे तरीके से वहाँ ऐसा करने के लिए SO
pfrank

2
यदि किनारों का उपयोग करते हुए FForExtendedLayout = UIRectEdgeNone, आप शायद कस्टम बदलाव लागू करना चाहते हैं। क्योंकि अन्यथा, विचारों को धक्का देने पर, डिफ़ॉल्ट संक्रमण एनीमेशन के दौरान पारदर्शी बार के नीचे एक अंधेरे झिलमिलाहट पैदा करेगा। FYI करें, यहां एक बुनियादी स्लाइडिंग संक्रमण के लिए एक त्वरित संसाधन है: gist.github.com/ArtFeel/7690431
anna

8

यदि आप इसे संपूर्ण ऐप के माध्यम से करना चाहते हैं तो आपको UIAppearance प्रॉक्सी (iOS5 +) का उपयोग करना चाहिए:

UINavigationBar *navigationBarAppearance = [UINavigationBar appearance]; navigationBarAppearance.backgroundColor = [UIColor clearColor]; [navigationBarAppearance setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; navigationBarAppearance.shadowImage = [[UIImage alloc] init];

डॉक्स: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html

लेख: http://nshipster.com/uiappearance/


इसे देखने वाले लोगों के लिए बस एक नोट - इस कोड को अपने एपडेलगेट didFinishLaunchingWithOptions में एक त्वरित और गंदे तरीके से लागू करने के लिए डालें।
शॉन एफ

आप इस उपस्थिति प्रॉक्सी को केवल विशिष्ट UINavigationControllerउपवर्गों के साथ काम करने के लिए भी सेट कर सकते हैं - यानी, जो आप चाहते हैं कि यह व्यवहार लागू हो।
इवान आर


0
@implementation MyCustomNavigationBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)setup {
    [self setupBackground];
}

- (void)setupBackground {
    self.backgroundColor = [UIColor clearColor];
    self.tintColor = [UIColor clearColor];

    // make navigation bar overlap the content
    self.translucent = YES; 
    self.opaque = NO;

    // remove the default background image by replacing it with a clear image
    [self setBackgroundImage:[self.class maskedImage] forBarMetrics:UIBarMetricsDefault];

    // remove defualt bottom shadow
    [self setShadowImage: [UIImage new]]; 
}

+ (UIImage *)maskedImage {
    const float colorMask[6] = {222, 255, 222, 255, 222, 255};
    UIImage *img = [UIImage imageNamed:@"nav-white-pixel-bg.jpg"];
    return [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
}

@end

0

जिस चीज़ पर मैंने ठोकर खाई, वह यह है कि अगर मैंने एक उपवर्ग UINavigationBarबनाया और फिर एक खाली -(void)drawRect:पद्धति बनाई , तो मुझे एक पारदर्शी नेविगेशन बार मिलेगा। मैंने केवल आईओएस 7. * में यह परीक्षण किया, लेकिन यह काम करने लगा!

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