Как скрыть панель навигации, не теряя возможность сдвига

Вы можете попробовать этот взлом:

import timeit

def foo():
    print 'bar'

def dotime():
    t = timeit.Timer("foo()")
    time = t.timeit(1)
    print "took %fs\n" % (time,)

import __builtin__
__builtin__.__dict__.update(locals())

dotime()
23
задан Zinan Xing 13 October 2014 в 02:44
поделиться

8 ответов

Нашли решение:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // hide nav bar
    [[self navigationController] setNavigationBarHidden:YES animated:YES];

    // enable slide-back
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
        self.navigationController.interactivePopGestureRecognizer.delegate = self;
    }
}


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    return YES;
}

И в .h файле, соответствуют UIGestureRecognizerDelegate

21
ответ дан atulkhatri 13 October 2014 в 02:44
поделиться

Если скрытие панели навигации не помогло, попробуйте изменить прямоугольник панели навигации и посмотрите?

navBarBgFrame.origin.y = - navBarBgFrame.size.height;

0
ответ дан Prabhu.Somasundaram 13 October 2014 в 02:44
поделиться

Протестировано с Swift 2 решение @gabbler, если вы используете

self.navigationController?.navigationBar.hidden = true

Swift 3.0

self.navigationController?.navigationBar.isHidden = true

вместо

self.navigationController?.navigationBarHidden = true

, проведите назад жест работает как очарование!

51
ответ дан Jaleel Nazir 13 October 2014 в 02:44
поделиться

Swift 4.x и iOS 11.4.

Решение @gabbler все еще работает. ИДК, похоже, что это ошибка UIKit, но ..

Просто используйте:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.navigationBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    self.navigationController?.navigationBar.isHidden = false
}
2
ответ дан atereshkov 13 October 2014 в 02:44
поделиться

Решение Зинан Синс в Swift 4.2 (Пожалуйста, дайте ему голос!):

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.setNavigationBarHidden(true, animated: true)
    self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true
    self.navigationController?.interactivePopGestureRecognizer?.delegate = self
}
1
ответ дан Sean Stayn 13 October 2014 в 02:44
поделиться

для форм Xamarin я боролся с этим, поэтому сначала не NavigationRenderer, вы получите нулевой NavigationController, вместо этого используйте PageRenderer:

[assembly: Xamarin.Forms.ExportRenderer(typeof(ContentPage), typeof(ContentPageRenderer))]
namespace sample
{
    class ContentPageRenderer : PageRenderer
    {
        public override void ViewWillAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            var navctrl = this.ViewController.NavigationController;
            navctrl.InteractivePopGestureRecognizer.Delegate = new UIGestureRecognizerDelegate();
            navctrl.InteractivePopGestureRecognizer.Enabled = true;

        }
    }
}
1
ответ дан Abdullah Tahan 13 October 2014 в 02:44
поделиться

Обязательно включите:

self.navigationController.navigationBar.hidden = YES;

И:

self.navigationController.interactivePopGestureRecognizer.delegate = self;

И:

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    }

Оно должно выглядеть так:

- (void)viewWillAppear:(BOOL)animated {

    self.navigationController.navigationBar.hidden = YES;
    self.navigationController.interactivePopGestureRecognizer.delegate = self;
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
            self.navigationController.interactivePopGestureRecognizer.enabled = YES;
        }
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    return YES;
}
3
ответ дан Wyetro 13 October 2014 в 02:44
поделиться

Используйте

self.navigationController.navigationBar.hidden = YES;

или добавьте эту строку в viewWillAppear:

self.navigationController.interactivePopGestureRecognizer.delegate = self;

Кажется, что взаимодействие не эффективно, добавление этой строки и приведение контроллера представления в соответствие с протоколом UIGestureRecognizerDelegate заставит это работать.

7
ответ дан gabbler 13 October 2014 в 02:44
поделиться