使用搜索控制器将子视图添加到导航栏

时间:2020-04-17 20:45:05

标签: ios swift xcode uinavigationcontroller

我试图将自定义子视图按钮添加到导航栏中,但无法将其放置在所需位置。我的目标是使按钮以标题标签居中(无论大小)。但是目前,我正在尝试将其锚定在导航栏的底部。但是,我无法访问搜索栏来正确添加约束。

Current Outcome

func setupNav() {
    guard let navController = navigationController else { return }
    let navBar = navController.navigationBar

    let settingsButton = UIButton()
    settingsButton.setImage(UIImage(named: "settings-button")?.withRenderingMode(.alwaysTemplate), for: .normal)
    settingsButton.tintColor = .textColor()
    settingsButton.addTarget(self, action: #selector(openSettings), for: .touchUpInside)

    navBar.addSubview(settingsButton)
    settingsButton.anchor(top: nil, left: nil, bottom: navBar.bottomAnchor, right: navBar.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 5, paddingRight: 10, width: 30, height: 30)
}

2 个答案:

答案 0 :(得分:0)

您应该可以使用来访问搜索栏

navigationItem.searchController?.searchBar

答案 1 :(得分:0)

您需要设置按钮的此属性,以使您可以通过编程方式添加约束:

settingsButton.translatesAutoresizingMaskIntoConstraints = false

这是我的代码:

func setupNav() {
    guard let navController = navigationController else { return }
    let navBar = navController.navigationBar

    let button = UIButton()
    button.setTitle("Test", for: .normal)
    button.setTitleColor(.red, for: .normal)
    button.translatesAutoresizingMaskIntoConstraints = false

    button.addTarget(self, action: #selector(openSettings), for: .touchUpInside)

    navBar.addSubview(button)
    navBar.addConstraints([
        NSLayoutConstraint(item: navBar, attribute: .trailing, relatedBy: .equal, toItem: button, attribute: .trailing, multiplier: 1, constant: 20),
        NSLayoutConstraint(item: button, attribute: .centerY, relatedBy: .equal, toItem: navBar, attribute: .centerY, multiplier: 1, constant: 0)
    ])
}

快乐的编码。