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.
Image 2. Non masqué Grande barre de navigation avec programmation (searchar.isHidden non implémenté ici)
Merci d'avance.
J'ai déjà essayé mais je n'ai pas couru
tableView.setContentOffset(.zero, animated: false)
navigationController?.navigationBar.prefersLargeTitles = false
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)
}
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
}