как да скриете лентата на състоянието и лентата за навигация, когато докоснете устройството

Как да скрия лентата на състоянието и лентата за навигация, когато докосна устройството като снимки в iphone? Бях използвал

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)

но не работи.

Редактиране: Бих искал да скрия и покажа лентата на състоянието и лентата за навигация, а не да ги скрия за постоянно.


person Aditya Dharma    schedule 09.10.2014    source източник
comment
stackoverflow.com/questions/18303746/   -  person Kirsteins    schedule 09.10.2014


Отговори (3)


Със Swift 5 и iOS 12, според вашите нужди, можете да изберете един от следните три кодови фрагмента, за да разрешите проблема си.


#1. Използване на UINavigationController hidesBarsOnTap свойство + UIViewController prefersStatusBarHidden и preferredStatusBarUpdateAnimation свойства

От iOS 8 UINavigationController има свойство hidesBarsOnTap. hidesBarsOnTap има следната декларация:

var hidesBarsOnTap: Bool { get set }

Булева стойност, показваща дали контролерът за навигация позволява скриване на своите ленти с помощта на жест с докосване.

Apple също заявява за hidesBarsOnTap:

Когато стойността на това свойство е true, контролерът за навигация превключва скриването и показването на своята навигационна лента и лента с инструменти в отговор на иначе необработено докосване в областта на съдържанието. Стойността по подразбиране на това свойство е false.

Следният код показва как да внедрите hidesBarsOnTap:

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        navigationController?.hidesBarsOnTap = true
    }
    
    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }
    
    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }
    
}

#2. Използване на UINavigationController setNavigationBarHidden(_:animated:) метод + UIViewController prefersStatusBarHidden и preferredStatusBarUpdateAnimation свойства с UIButton

UINavigationController има метод, наречен setNavigationBarHidden(_:animated:). setNavigationBarHidden(_:animated:) има следната декларация:

func setNavigationBarHidden(_ hidden: Bool, animated: Bool)

Задава дали лентата за навигация да е скрита.

Следният код показва как да превключвате лентата на състоянието и лентата за навигация, като използвате setNavigationBarHidden(_:animated:) с UIButton, зададен в Storyboard и свързан към @IBAction:

import UIKit

class ViewController: UIViewController {
    
    // Link this @IBAction to a `UIButton`
    @IBAction func toggle(_ sender: UIButton) {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }
    
    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }
    
    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }
    
}

#3. Използване на UINavigationController setNavigationBarHidden(_:animated:) метод + UIViewController prefersStatusBarHidden и preferredStatusBarUpdateAnimation свойства с UIGestureRecognizer

Като алтернатива на предишния код можете да използвате setNavigationBarHidden(_:animated:) с UIGestureRecognizer вместо UIButton:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.toggle))
        view.isUserInteractionEnabled = true
        view.addGestureRecognizer(gesture)
    }

    @objc func toggle() {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

  • Уверете се, че UIViewControllerBasedStatusBarAppearance е зададено на true в Info.plist на вашия проект, в противен случай предишните примерни кодове няма да работят.
  • Вижте този отговор за подобен въпрос, ако трябва да се насочите към iOS 10.
person Imanou Petit    schedule 09.10.2014
comment
Много впечатляващо. това много ми харесва Работи добре за мен - person LondonGuy; 11.03.2015
comment
Това е чудесно решение. Използвам това за изображение, което е на цял екран, но когато лентата за навигация и лентата с инструменти се анимират, това променя позицията на моето изображение. Как да поправя това? Забележка: Изображението ми е вътре в изглед за превъртане и моят изглед за превъртане е с размера на екрана без включените навигация и лента с инструменти - person rohaldb; 19.01.2016
comment
Когато използвате prefersStatusBarHidden() с видимостта на навигационната лента, навигационната лента няма да анимира (слайд), когато се скрие, но все пак анимира слайда, когато се показва. Все още не намерих начин да поправя това. - person Felix Lieb; 21.06.2016
comment
@rohaldb Имам същия проблем, намерихте ли решение? РЕДАКТИРАНЕ: решенията са да се използва automaticallyAdjustsScrollViewInsets = false - person ; 28.06.2017
comment
@FelixLieb Намерихте ли решение? - person ; 28.06.2017

В iOS 8 и по-нова версия можете просто да използвате скрива BarsOnTap:

    navigationController?.hidesBarsOnTap = true
person Cooliopas    schedule 08.10.2015

Ужасно е, че този проблем продължава да съществува, 6 години по-късно. Заявих грешка, както е описано в този отговор. Най-добрият ви залог е да използвате стария (отхвърлен в iOS 9) API OP, споменат във въпроса, комбиниран с UINavigationController.setNavigationBarHidden(). Или жертвате анимацията.

person Ortwin Gentz    schedule 25.01.2021