2014-09-26 4 views
0

Я хочу использовать UIVIsualEffectView для добавления размытого эффекта в панель навигации. У меня есть настраиваемый класс навигационной панели, как показано ниже.

Заголовочный файлКак добавить UIVisualEffectView в UINavigationBar в iOS 8?

#import <UIKit/UIKit.h> 

@interface GSNavigationBar : UINavigationBar 
@end 

И immplementation файл выглядит следующим образом

#import "GSNavigationBar.h" 

@implementation GSNavigationBar 

- (void) awakeFromNib { 

    UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]]; 
    visualEffectView.frame = CGRectMake(0, -21, self.frame.size.width , self.frame.size.height + 21); 
    [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
    [self insertSubview:visualEffectView atIndex:1000]; 
} 
@end 

С кодом выше я могу реализовать расплывчатый эффект панели навигации. При нажатии контроллера просмотра (с помощью «Push» segue) элементы левой панели и элементы правой панели на панели навигации становятся неактивными. Для большей ясности я добавил скриншоты контроллеров представлений.


This is view controller #1. All navigation item buttons are clickable
This is view controller #2. We land up here due to push segue from view controller #1. Navigation item buttons are NOT clickable. Also the title goes missing. I had set the title using self.title

+0

Почему вы добавив пустое изображение в панели навигации? Навигационная панель уже имеет эффект размытия, вы должны использовать это. –

ответ

1

Панель навигации с translucent = YES уже имеет эффект размытия.

Так что просто используйте его.

+0

Я изменил код, добавив в настоящее время мой код выглядит как - (void) awakeFromNib { self.translucent = YES; } НЕ производит желаемого эффекта. Я что-то упустил? –

+0

он должен работать с простым - (void) awakeFromNib {self.translucent = YES}; – l0gg3r

+0

Извините self.translucent = YES; не дает желаемого эффекта. –

1

Это сделано для того, чтобы сделать навигационную панель полностью прозрачной, если у вас размытый фон, я считаю, что это будет эффект, который вам нужен.

Свифта:

func setupNavigationBar() { 
    navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
    navigationController!.navigationBar.shadowImage = UIImage() 
    navigationController!.navigationBar.translucent = true 
} 

цель C:

- (void) setupNavigationBar{ 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 

    self.navigationController.navigationBar.shadowImage = [UIImage new]; 
    self.navigationController.navigationBar.translucent = YES; 
} 
1

установить свойство UserInteractionEnabled к NO (ложное в Swift) на UIVisualEffect.

так на вашем коде, вы должны добавить:

visualEffectView.userInteractionEnabled = NO 

это должно сделать ваши navigationItems левый и правый использовать

Смежные вопросы