iOS [Obj-C] - панель навигации, прозрачная с видимыми элементами при прокрутке - PullRequest
0 голосов
/ 05 мая 2018

Это мой вопрос

КОНТЕКСТ У меня есть ViewController, который дает эффект, когда панель навигации становится прозрачной, когда пользователь опускается в прокрутке, и панель навигации становится нормальной, когда пользователь переходит в вид прокрутки. Этот эффект я сделал с помощью методов UIScrollViewDelegate. Это код:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offset = scrollView.contentOffset.y;
    if (scrollView.contentOffset.y < 0){
        scrollView.bounces = false;
    }else{
        scrollView.bounces = true;
    }
        CGFloat currentAlpha = (offset / 310);
        if (currentAlpha < 0) {
            self.navigationController.navigationBar.translucent = YES;
            self.navigationController.navigationBar.alpha = 1;
            self.navigationController.titleNavBar.alpha = 0; //This property I made in an UINavigationController extension
        } else {
            self.navigationController.navigationBar.translucent = YES;
            self.navigationController.navigationBar.alpha = 1;
            self.navigationController.titleNavBar.alpha = currentAlpha; //This property I made in an UINavigationController extension
            [self.navigationController.navigationBar setBackgroundColor:[UIColor colorWithRed:0.0f/0.0f green:136.0f/255.0 blue:206.00f/255.0f alpha:currentAlpha]];
        }
}

С предыдущим кодом я получил эффект, но у меня есть проблема: я не могу добавить его в строку состояния, потому что self.navigationController.navigationBar.translucent установлен на YES. Таким образом, в iPhone строка состояния отображается прозрачной, а в iPhone X эта прозрачность выше, чем в других iPhone (см. Изображение).

enter image description here Кто-нибудь знает, как я могу сделать этот прозрачный эффект с помощью панели навигации и панели статистики?

1 Ответ

0 голосов
/ 05 мая 2018

Вам нужно изменить цвет statusBar UIView с цветом NavigationBar.

  • Создать приложениеДелегат SharedInastance:

    + (AppDelegate *)sharedAppDelegate {
    return (AppDelegate *)[UIApplication sharedApplication].delegate;
    }
    
  • Добавьте приведенный ниже код в AppDelegate для просмотра строки состояния:

     - (UIView *)statusBarView {
    
        return [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    }
    
  • Добавьте ниже код, если вы хотите изменить цвет строки состояния:

    [[AppDelegate sharedAppDelegate] statusBarView].backgroundColor = [UIColor redColor];
    

enter image description here

...