【问题标题】:Hide Navigation Controller Search Bar & opened Large Title programmatically隐藏导航控制器搜索栏并以编程方式打开大标题
【发布时间】:2019-03-12 08:52:56
【问题描述】:

我有一个tableView。我设置了有关 searchController 的所有设置(大型导航栏中的搜索栏)-(滚动 tableview 时打开/关闭)。我实现了rightBarButtonItem,名称为 'Close' 。我想以编程方式隐藏/关闭 tableView 和搜索栏。我可以隐藏 tableView 但不能隐藏 SearchBar。

当我为 SearchBar 执行 isHidden 时,大型导航栏不会缩小到正常大小。

图 1. 向下滚动打开搜索栏。

图 2. 未以编程方式隐藏大型导航栏(此处未实现 searchar.isHidden)

提前致谢。

我之前尝试过,但没有运行

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

【问题讨论】:

  • 在隐藏搜索控制器时需要设置prefer-large 导航栏标题为false
  • 我不使用大标题,我也试过了
  • 导航搜索栏或 UIsearchBar 你在用什么。 ?
  • UISearchController
  • @codeByThey 你能分享一下你的代码吗?

标签: ios swift uitableview uinavigationcontroller uisearchbar


【解决方案1】:

我试图找到隐藏搜索栏的正确方法,但没有找到。但我找到了一种解决方法来隐藏您的搜索栏,即更改内容偏移您的表格视图。

你可以试试这个功能来隐藏你的表格视图和搜索栏。

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)
}

【讨论】:

    【解决方案2】:

    试试这个:

     navigationItem.searchController = nil
    

    这是我所有的测试代码:

    @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
    }
    

    【讨论】:

    • 有了这个功能,搜索栏消失了,这是真的,但大导航栏不是。
    • 我从不使用大标题。如果您可以使用普通标题,我想接受您的解决方案。
    • @codeByThey 如果对您有帮助,请接受我的回答。并让有相同问题的人更快地找到正确的解决方案。谢谢!
    • 它对我不起作用。我会在 2 天内尝试另一个解决方案,如果它给了我解决方案的方法,我再次打开赏金,我会给你积分。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多