为什么UISearchBar在Swift中跳下并且第一行覆盖/重叠?

时间:2017-11-07 23:38:55

标签: swift xcode uinavigationcontroller uisearchbar swift4

我在UISearchBar中添加UINavigationController作为subView,但subView表现得很奇怪。它隐藏UITableView的部分标题,当我点击它时它会垂直跳转到中心。

enter image description here enter image description here

如何将UISearchBar的背景颜色更改为橙​​色?我尝试了色彩和背景色,但它没有用。

var searchController: UISearchController!
var searchResultController: UITableViewController!

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.isTranslucent = false

    navigationController?.navigationBar.prefersLargeTitles = true;
    navigationController?.navigationBar.largeTitleTextAttributes = [
        NSAttributedStringKey.foregroundColor : UIColor.white
    ]
    navigationController?.navigationBar.barTintColor = UIColor.orange

    searchController = UISearchController(searchResultsController: searchResultController)

    self.searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false
    self.definesPresentationContext = true

    let searchBar = searchController.searchBar
    searchBar.searchBarStyle = .default
    searchBar.tintColor = UIColor.orange
    searchBar.backgroundColor = UIColor.orange

    view.addSubview(searchBar)
}

2 个答案:

答案 0 :(得分:1)

我添加了以下行来隐藏详细ViewController上的搜索栏,但它导致搜索栏跳了下来。

self.definesPresentationContext = true

我删除了该行,但我在详细的ViewController上有搜索栏,这就是我修复它的方法。

我将搜索栏变量传递给详细视图控制器并将其属性设置为隐藏。我还添加了以下代码行,以便在用户返回原始视图时返回搜索栏。

override func viewWillDisappear(_ animated: Bool) {
    searchBar.isHidden = false
}

以下代码行修复了隐藏表视图的第一行或节标题的第二个问题。

self.tableView.contentInset = UIEdgeInsetsMake(50,0,0,0);

答案 1 :(得分:0)

尝试使用以下代码段。

override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        tableView.invalidateIntrinsicContentSize()
    }