web-dev-qa-db-fra.com

Masquer la barre de recherche du contrôleur de navigation et ouvrir le titre large par programmation

J'ai un tableView. Je règle tous les paramètres de searchController (barre de recherche dans la grande barre de navigation) - (ouverture/fermeture lors du défilement de la vue tableau) J'ai implémenté rightBarButtonItem dont le nom est 'Close'. Je veux masquer/fermer tableView et barre de recherche avec par programme. Je peux masquer tableView mais pas SearchBar. 

Quand je fais isHidden pour SearchBar, la grande barre de navigation ne se réduit pas à la taille normale.

Pic 1. Barre de recherche ouverte avec défilement vers le bas.

 enter image description here

Image 2. Non masqué Grande barre de navigation avec programmation (searchar.isHidden non implémenté ici)

 enter image description here

Merci d'avance.

J'ai déjà essayé mais je n'ai pas couru

tableView.setContentOffset(.zero, animated: false)
navigationController?.navigationBar.prefersLargeTitles = false
6
codeByThey

J'ai essayé de trouver un moyen approprié pour masquer la barre de recherche, mais je n'ai pas trouvé. Mais j'ai trouvé une solution de contournement pour masquer votre barre de recherche qui consiste à changer le contenu en décalage de votre affichage sous forme de tableau. 

Vous pouvez essayer cette fonction pour masquer l’affichage du tableau et la barre de recherche.

func hide() {
    tableView.isHidden = true
    let point = tableView.contentOffset
    let searchBarFrame = self.navigationItem.searchController?.searchBar.frame
    let newPoint = CGPoint(x: point.x, y: point.y + searchBarFrame!.height)
    tableView.setContentOffset(newPoint, animated: true)
}
1
Alperk

Essayez ceci:  

 navigationItem.searchController = nil

Ceci est tout mon code de test:

@IBOutlet weak var tableView: UITableView!

@IBOutlet weak var leftBarButtonItem: UIBarButtonItem!

var isHidden = false

var searchController: UISearchController {

    let search = UISearchController(searchResultsController: nil)

    search.searchBar.placeholder = "hello world"

    search.obscuresBackgroundDuringPresentation = false

    return search
}


override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.title = "Test"

    tableView.delegate = self

    tableView.dataSource = self

    showSearchController()
}

@IBAction func isHiddenAction(_ sender: UIBarButtonItem) {
    isHidden = !isHidden

    self.tableView.isHidden = isHidden

    if isHidden {
        leftBarButtonItem.title = "Show"
        hiddenSearchController()

    } else {
        leftBarButtonItem.title = "Hidden"
        showSearchController()
    }
}

func hiddenSearchController() {
    navigationItem.searchController = nil
}

func showSearchController() {

    navigationItem.searchController = searchController

    navigationItem.hidesSearchBarWhenScrolling = true

    definesPresentationContext = true
}

screenShots

1
UninhibitedSoul