隐藏导航控制器搜索栏并以编程方式打开大标题

时间:2018-10-07 14:32:08

标签: ios swift uitableview uinavigationcontroller uisearchbar

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

当我为isHiddenSearchBar时,大导航栏不会缩小到正常大小。

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

enter image description here

图片2。未通过编程隐藏大型导航栏(此处未实现searchar.isHidden)

enter image description here

谢谢。

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

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

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:1)

只需尝试以下操作:

 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
}

screenShots