我试图在导航栏中添加一个自定义子视图按钮,但在将其放置在所需位置时遇到问题。我的目标是让按钮与标题标签居中,无论它是大的还是小的。但现在我正试图将它锚定在导航栏的底部。但是,我无法访问搜索栏来正确添加约束。
当前结果
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)
}
您应该能够使用访问搜索栏
navigationItem.searchController?.searchBar
您需要设置按钮的此属性,该属性使您能够以编程方式添加约束:
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)
])
}
快乐的编码。