2016-05-04 2 views
0

Я пытаюсь создать прозрачную UINavigationBar и вот что я делаю:Почему вид UINavigationController корневой контроллер меньше, чем навигационный контроллер

Во-первых, у меня есть navVC и общее VC в корневой VC в моем коде.

SNLoginViewController *loginVC = [[SNLoginViewController alloc] init]; 
SNLoginNavController *loginNavVC = [[SNLoginNavController alloc] initWithRootViewController:loginVC]; 
[self presentViewController:loginNavVC animated:YES completion:nil]; 

Я не переопределить init метод SNLoginViewController.

А вот реализация initWithRootViewController::

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController { 
    self = [super initWithRootViewController:rootViewController]; 
    if (self) { 

     UIImage *bgImage = [UIImage imageNamed:@"bg"]; 
     UIImageView *bgImageView = [[UIImageView alloc] initWithImage:bgImage]; 
     bgImageView.frame = [UIScreen mainScreen].bounds; 
     [self.view insertSubview:bgImageView atIndex:0]; 

     [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"transparent"]//transparent is a transparent png 
          forBarMetrics:UIBarMetricsCompact]; 
     self.navigationBar.shadowImage = [UIImage imageNamed:@"transparent"]; 
     self.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

     [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName: [UIFont systemFontOfSize:18]}]; 
     self.navigationBar.clipsToBounds = YES; 
    } 
    return self; 
} 

Используя эти коды (setBackgroundImage:forBarMetrics:) я должен был быть в состоянии сделать навигационную панель прозрачной, но что-то пошло не так. Основная проблема заключается в том, что кадр loginVC меньше, чем loginNavVC.

http://static.zybuluo.com/zhengbuqian/bcdt5ht5nsv69izgasqzdyhz/Snip20160504_1.png

На рисунке выше выбранного вида имеет loginVC и один слева имеет loginNavVc. loginVC меньше, чем loginNavVc.

Но в viewDidLoad из loginVC распечатать выбранный вид, его рама (0 0; 320 568), но при печати его описание в иерархии видов (тот же адрес в памяти), его рама (0 64; 320 504). Почему это произойдет? Как сделать его полноэкранным (не полный экран, как игры, строка состояния должна все еще быть заметной)?

+0

Какие опции выбраны в раскадровке для регулировки прокрутки и расширения краев? – Wain

ответ

1

Добавьте это перед представлением навигационного контроллера.

[self.loginNavVC.navigationBar setBackgroundImage:[UIImage new] 
        forBarMetrics:UIBarMetricsDefault]; 

self.navigationController.navigationBar.shadowImage = [UIImage new]; 

self. loginNavVC.navigationBar.translucent = YES; 
+0

Спасибо, проблема решена! –

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