当用户取消搜索时,约束不会改变

时间:2016-10-06 09:57:45

标签: ios swift

所以我有一个搜索图标作为我的右栏按钮项。当用户点击图标时,它允许用户搜索并仅在tableview中显示某些值。它还隐藏了顶部的导航栏按钮和导航控制器正下方的filterBar

func setupNavBarButtons() {
    let searchImage = UIImage(named: "search_icon")?.withRenderingMode(.alwaysOriginal)
    let searchBarButtonItem = UIBarButtonItem(image: searchImage, style: .plain, target: self, action: #selector(handleSearch))
    navigationItem.rightBarButtonItem = searchBarButtonItem
    setupFilterButton()
}

在搜索时隐藏过滤条和导航栏项目:

func handleSearch() {
    searchController.searchBar.isHidden = false
    navigationItem.titleView = searchController.searchBar
    searchController.searchBar.becomeFirstResponder()
    navigationItem.rightBarButtonItems = nil
    navigationItem.leftBarButtonItems = nil
    filterBar.isHidden = true
    tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
}

然后,一旦用户停止搜索,它就会再次出现,如下所示:

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    setupNavBarButtons()
    searchController.searchBar.isHidden = true
    filterBar.isHidden = false
    tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 40).isActive = true
    // Also tried tableView.topAnchor.constraint(equalTo: filterBar.bottomAnchor).isActive = true
}

搜索前:

enter image description here

搜索期间

enter image description here

搜索后:正如您所见,桌面视图无法返回原来的位置。 filterBar是带有'地图'的灰色视图。和'位置'

enter image description here

仍然遇到同样的问题,所以我在这里上传了我的项目:

https://github.com/lukejones1/bug

1 个答案:

答案 0 :(得分:1)

首先,您添加了40个px的“高度”布局约束。 并且当用户单击搜索按钮时,您添加了“高度”布局约束,其中0 px。 再次,当用户点击取消按钮时,你添加了40个px的'height'布局约束。

您需要重用布局约束。

{{1}}

}

有一个有趣的编码! :)