SORU
7 EKİM 2013, PAZARTESİ


Nasıl iOS7 UİNavigationBar 1px alt satırı gizle

Bazen bir navigasyon çubuğu içeriği ile uyum sağlamak için gereken bir uygulama var.

Herkes bu can sıkıcı küçük bar rengini değiştirmek kurtulmak için nasıl biliyor mu?

Durum aşağıdaki resim üzerinde var - bu 1px yükseklik çizgiyi hakkında aşağıda konuşuyorum"" . Kök Görünümü Denetleyicisi

enter image description here

CEVAP
7 EKİM 2013, PAZARTESİ


Bunu yapmak için, özel gölge bir resim ayarlamanız gerekir. Ama gösterilecek gölge resim için ayrıca Apple'ın belgelerine özel bir arka plan görüntüsü, bir alıntı için:

Özel gölge bir resim gösterilmesi için, özel bir arka plan görüntüsü olmalı ayrıca setBackgroundİmage ile ayarlanması:forBarMetrics: yöntem. Eğer varsayılan arka plan görüntüsü, varsayılan gölge görüntü kullanılır bu özelliğin değeri ne olursa olsun kullanılabilir.

Bu yüzden kodu:

UINavigationBar *navigationBar = self.navigationController.navigationBar;

[navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"]
                   forBarPosition:UIBarPositionAny
                       barMetrics:UIBarMetricsDefault];

[navigationBar setShadowImage:[UIImage new]];

Bu kod resim "" bar arka plan olarak.NavigationBarBackground adlı istediğinizi varsayar Eğer öyle değilse,arka plan düz bir renk yapabilirsiniz[UIImage new] backgroundImage ayarı ve renk navigationBar.backgroundColor atayarak senin gibi.

Sadece yukarıdaki "resmi" bunu saklamanın en iyi yolu. Ama ne yazık ki bar kalınlığı kaldırır.

Nasıl bar şeffaf tutmak için mi?

Başka bir yaklaşım gerekir saydamlık tutmak, kesmek gibi görünüyor ama iyi çalışıyor. Kaldırmak için çalışıyoruz çizgisi UIImageView yere UINavigationBar altında. Onu bulmak ve gerektiğinde ya da gizlemek göstermek zorundayız.

Örnek değişken ilan ilk:

@implementation MyViewController {
    UIImageView *navBarHairlineImageView;
}

Daha sonra viewDidLoad:

navBarHairlineImageView = [self findHairlineImageViewUnder:navigationBar];

Görüntü bulduğu yöntem ihtiyacımız görünüm:

- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
    if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
            return (UIImageView *)view;
    }
    for (UIView *subview in view.subviews) {
        UIImageView *imageView = [self findHairlineImageViewUnder:subview];
        if (imageView) {
            return imageView;
        }
    }
    return nil;
}

Ve bu sihirli dinlenme yapacak:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    navBarHairlineImageView.hidden = YES;
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    navBarHairlineImageView.hidden = NO;
}

Aynı yöntem, aynı zamanda UISearchBar saç çizgisi için çalışması gerekir.

Çok teşekkürler @Leo orijinal fikir için Natan!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013
  • Valdorsha

    Valdorsha

    8 Mayıs 2006