Подтвердить что ты не робот

Скрыть навигационную панель, но когда я перехожу к предыдущему виду (выскочил), он временно покажет старую кнопку. Зачем?

У меня есть контроллеры просмотра в контроллере навигации (root: RootViewController, second: ReadingViewController), но во втором контроллере представления я хочу отключить панель навигации для UIToolBar (поскольку мне это не нужно название и хотите больше кнопок, например, в iBooks или приложении Facebook). Проблема в том, что когда я скрываю навигационную панель во втором представлении, она появляется случайным образом еще секунду, когда я выхожу из контроллера вида (вернитесь назад).

Когда я выхожу на контроллер вида, на второй появляется кнопка "Назад":

enter image description here

Во втором контроллере просмотра я скрываю панель навигации в viewWillAppear::

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

    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

Также во втором контроллере представления я восстанавливаю панель навигации в viewWillDisappear::

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

    // ... other stuff

    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

Мне интересно, как я борюсь с этой проблемой, так что контроллеры представлений легко перемещаются.

4b9b3361

Ответ 1

Эй, почему бы вам не использовать панель навигации в качестве UIToolbar.

Вместо скрытия UINavigation вы можете имитировать контроллер навигации до UITootlbar, добавив к нему кнопки.

скрытие скрытия UINavigation будет сложным.

Я загрузил ссылку

Ответ 2

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

Я сделал видеоролик, показывающий, что происходит на моей машине, когда я перемещаюсь между двумя контроллерами представлений в интерфейсе навигации, один из которых показывает панель навигации, а другой нет: http://youtu.be/PxpchytWQ4A

Для меня это так же логично, как вы собираетесь получать, когда показываете и скрываете навигационную панель, когда вы нажимаете и поп! Вот код, который я использовал. Контроллер вида, который скрывает свою навигационную панель, имеет класс ViewController2. Этот код находится в делегате приложения:

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    dispatch_async(dispatch_get_main_queue(), ^{
        [(UINavigationController*)self.window.rootViewController setDelegate:self];
    });
    return YES;
}

-(void)navigationController:(UINavigationController *)nc 
     willShowViewController:(UIViewController *)vc 
                   animated:(BOOL)animated 
{
    [nc setNavigationBarHidden:([vc isKindOfClass:[ViewController2 class]]) 
                      animated:animated];   
}

Это все, что я сделал.

Ответ 3

Во втором представлении контроллер скрыть панель навигации в viewWillAppear::

self.navigationController.navigationBar.frame = CGRectMake(0, 0, 0, 0);

Чтобы открыть панель навигации, установите рамку в viewWillDisappear:

self.navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 44);

Ответ 4

Ну, как я понимаю из вашего вопроса, единственной проблемой вашего текущего подхода является временное появление оригинальной кнопки "Назад". Итак, почему бы не просто заблокировать эту кнопку для контроллера вида?

self.navigationItem.hidesBackButton = YES;

Я думаю, это может помочь. Но для вашей основной задачи я предпочел бы вам использовать настраиваемую панель навигации с возможностью добавлять столько кнопок, сколько захотите. Такой подход более естественен для iOS, и вы, вероятно, никогда не столкнетесь с такими проблемами, как вы упомянули в своем вопросе.

Ответ 5

Здравствуйте, Следующие вещи выполнили мою работу

В FirstViewController введите этот метод

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

и в SecondViewController поместите этот метод

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

    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

Я не использовал viewWillDisappear для моей работы.

Надеюсь, вам помогут.

Ответ 6

Это может быть так же просто, как перемещение вашего кода от viewWillDisappear до viewDidDisappear.

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

Ответ 7

Моя проблема заключается в том, что когда я нажимаю viewController с помощью navigationBar на один без него, используя настраиваемый переход, перемещающий его с левой стороны, я не могу заставить его следовать за вторым кадром контроллера представления. Он всегда падает сверху, создавая очень неприятный эффект всякий раз, когда я выполняю это действие.

Ответ 8

Вы можете отобразить панель навигации, которая заставляет ее отображаться в родительском контроллере представления, а затем перевести альфа от 0 до 1:

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

    self.navigationController.navigationBar.hidden = NO;
    self.navigationController.navigationBar.alpha = 0;

    [UIView animateWithDuration:0.3 animations:^{
        self.navigationController.navigationBar.alpha = 1;
    }];
}