Контроллер дочернего представления частично отображается под панелью навигации родительского контроллера

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

Это код, который я использую при добавлении контроллера дочернего представления:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!self.selectionBarViewController) //self.selectionBarViewController is the child view controller
    {

        self.selectionBarViewController = [[UCIScrollSelectionBarViewController alloc] init];

        self.selectionBarViewController.view.frame = CGRectMake(0.0f,
                                                                0.0f,
                                                                self.view.frame.size.width,
                                                                44.0f);

        self.selectionBarViewController.dataSource = self;
        self.selectionBarViewController.delegate = self;

        [self addChildViewController:self.selectionBarViewController];
        [self.view addSubview:self.selectionBarViewController.view];
        [self.selectionBarViewController didMoveToParentViewController:self];

        [self.selectionBarViewController beginAppearanceTransition:YES
                                                          animated:YES];

    }

    //More set up code here

}

Когда я настраиваю рамку контроллера дочернего представления, я могу ее видеть, однако в идеале я не хочу иметь условный код макета, если пользователь запускает приложение из iOS 6 или 7.


person williamb    schedule 20.09.2013    source источник


Ответы (1)


Причина проста: значение по умолчанию для полупрозрачного свойства панели навигации.

До iOS 6.1 значением по умолчанию было НЕТ, но начиная с iOS7 значение по умолчанию — ДА.

Полупрозрачная панель навигации просто находится поверх представления контроллера верхнего представления, в то время как непрозрачное приводит к соответствующему изменению размера представления контроллера представления.

Чтобы ответить на ваш вопрос, вы либо вручную устанавливаете navigationBar.translucent = NO, либо, если вы хотите сохранить его полупрозрачным, вам необходимо соответствующим образом настроить макет.

person micantox    schedule 20.09.2013
comment
Спасибо, микантокс, отлично работает. - person williamb; 20.09.2013