Как получить размытый и полупрозрачный эффект на панели навигации в iOS 7?
Проблема
Мое приложение выглядит правильно, но я не могу добиться размытого полупрозрачного эффекта, которым славится iOS 7. Шахта выглядит непрозрачной.
![enter image description here]()
Желаемый эффект
Я пытаюсь получить более очевидный эффект размытия, например приложение Apple Trailers:
![enter image description here]()
полупрозрачности
В моем подклассе UINavigationController я делаю навигационную панель полупрозрачной:
- (id)initWithRootViewController:(UIViewController *)rootViewController
{
if (self = [super initWithRootViewController:rootViewController]) {
self.navigationBar.translucent = YES;
}
return self;
}
Цвет оттенков
В моем подклассе UIApplicationDelegate я установил цвет оттенка панели навигации. Я обнаружил, что альфа цвета оттенка не имеет значения. То есть, используя альфа 0,1, не приведет к тому, что стержень станет более прозрачным.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
}
Ребра
В моем контроллере представления контента я установил кромку UIRectEdgeNone
, чтобы верхняя часть не отображалась на панели навигации. Если бы я использовал стандартный UIRectEdgeAll
, навигационная панель постоянно покрывала бы верхнюю часть моего содержимого. Даже если я должен был жить с этой аномалией, UIRectEdgeAll
все еще не позволяет эффект полупрозрачности.
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
}
Изменить: экспериментировать с краями
Объявление, указанное в комментариях @rmaddy в комментариях, может быть проблемой с edgeForExtendedLayout. Я обнаружил всеобъемлющий учебник edgeForExtendedLayout и попытался его реализовать:
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;
}
Это не сработало. Во-первых, эффекта полупрозрачности не было. Во-вторых, верхняя часть моего контента была отрублена. На следующей странице примера с приведенным выше кодом аватар был первоначально покрыт навигационной панелью, и прокручивать ее было очень сложно. Вы могли бы спуститься, чтобы увидеть верхнюю часть аватара, но когда вы отпустите, страница автоматически подпрыгнет, и аватар снова будет скрыт.
![enter image description here]()
Ответы
Ответ 1
Проблема была вызвана просмотром стороннего просмотра вниз EGORefreshTableHeaderView, который широко использовался до iOS 6 ввел контроль обновления системы.
![enter image description here]()
Этот взгляд смущает iOS 7, заставляя его думать, что контент выше, чем есть на самом деле. Для iOS 6 и 7 я условно переключился на UIRefreshControl. Теперь панель навигации не отключит мой контент. Я могу использовать UIRectEdgeAll
, чтобы мой контент попал под панель навигации. Наконец, я нажимаю навигационную панель с меньшей альфа, чтобы получить эффект полупрозрачности.
// mostly redundant calls, because they're all default
self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;
[[UINavigationBar appearance] setTintColor:[UIColor colorWithWhite:0.0 alpha:0.5]];
Ответ 2
Если вам нужно добиться того же эффекта, что и в магазине iTunes Store (темное размытие).
Настройте атрибут barStyle
на панели навигации следующим образом:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;