SORU
19 EYLÜL 2013, PERŞEMBE


İOS 7 şeffaf bir UİNavigationBar için parlak, canlı renkler elde


iOS 7.1 GÜNCELLEMESİ: UİNavigationBar alfa kanalı değiştirmek için çözüm gibi görünüyor bu güncelleme yok. Şu anda en iyi çözüm sadece 'o' ve seçtiğiniz ne olursa olsun umut saydam bir etkisi hale getirebilir. anlaşma gibi görünüyor Hala bu etrafında almanın yollarını arıyorum.


iOS 7.0.3 GÜNCELLEME: GitHub library we created biraz iOS 7.0.3 kullanırken bu soruna geçici bir çözüm bulmak için güncellendi. Ne yazık ki, her iki renk iOS 7.0.2 ve daha önceki iOS 7.0.3 oluşturulan destek için sihirli bir formül yok. Apple geliştirilmiş gibi görünüyor doygunluğu, ama opaklık pahasına saydamlık opaklık düzeyini bağlıdır bulanık beri). Ben, birkaç diğerleri ile birlikte, bu çok daha iyi bir düzeltme oluşturma üzerinde çalışıyoruz.


Birçok kişi zaten iOS 7 şeffaf bir UİNavigationBar renk doygunluğu azalt eğilimindedir nerede sorun rastlamak eminim.

Amacım bu renk renk, ama şeffaf bir UİNavigationBar ulaşmak için:

UINavigationBar, Opaque

Ancak, saydamlık, bunu alıyorum dedim. Arka plan görünümü anlıyorum bu görünüm biraz daha hafif hale getirecek beyaz,

UINavigationBar, Translucent

Hala saydamlık yaparken orijinal rengi elde etmek için herhangi bir yolu var mı? Burada gösterilen Facebook zengin, mavi rengi, kendi bar almak mümkün olmuştur fark ettik:

Facebook UINavigationBar, Translucent

..yani bir yolu olmalı biliyorum. Arka plan manzarası belli ki burada bir fark yaratmak, ama içerik çoğu da gri/beyaz. Eğer koymak ne olursa olsun, saydamlık altında canlı renkler elde edemiyoruz gibi görünüyor.

Çözümü ile güncellendi.

İşte geliyor sonunda çözüm. aprato'nin çözümü ve UINavigationController a sınıfı içinde özel UINavigationBar kapsıyor aldım. I have created a repository that has this implementation listed below, along with an example app.

////////////////////////////
// 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

CEVAP
19 EYLÜL 2013, PERŞEMBE


iOS 7.0.3 GÜNCELLEME:Yukarıda gördüğünüz gibi 7.0.3 şeyler değişti. Benim özü güncelledik. Umarım bu sadece insanlar yükseltme olarak gidecek.

Orijinal Cevabı: Bir diğer yanıtları iki birleştirerek hack ile sona erdi. UİNavigationBar sınıflara ve bazı ekstra boşluk ile arka katman eğer yükseklik durumunu çeşitli barlarda herhangi bir yukarı eğer kapak için ekliyorum. Katman barTintColor ayarlama her düzen subviews ve renk değişiklikleri düzeltilmiş olur.

Özü: 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);
  }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • DudeFromUkraine

    DudeFromUkra

    7 Ocak 2008
  • Stevie

    Stevie

    2 Mayıs 2010