我可以在 Swift 中制作大的 rightBarButtonItem 吗?
Can I make large rightBarButtonItem in Swift?
我有:
self.title = "Title"
navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
navigationItem.rightBarButtonItem?.tintColor = .white
是否可以使这个 Add
看起来完全像这样 Title
?
像这样:
或此问题的任何其他解决方案 - 标题左侧 - 按钮图像右侧,高度相同?
我在我的应用程序中做了类似的事情 - 不完全是您要找的东西,但应该足够让您继续:
func setupNavBar() {
let rightButton = UIButton()
rightButton.setTitle("Leave", for: .normal)
rightButton.addTarget(self, action: #selector(rightButtonTapped(button:)), for: .touchUpInside)
navigationController?.navigationBar.addSubview(rightButton)
rightButton.tag = 97
rightButton.frame = CGRect(x: self.view.frame.width, y: 0, width: 120, height: 20)
let targetView = self.navigationController?.navigationBar
let trailingConstraint = NSLayoutConstraint(item: rightButton, attribute:
.trailingMargin, relatedBy: .equal, toItem: targetView,
attribute: .trailingMargin, multiplier: 1.0, constant: -16)
let bottomConstraint = NSLayoutConstraint(item: rightButton, attribute: .bottom, relatedBy: .equal,
toItem: targetView, attribute: .bottom, multiplier: 1.0, constant: -6)
rightButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([trailingConstraint, bottomConstraint])
}
我还创建了这个函数来删除它(因此使用上面的标签):
func removeRightButton(){
guard let subviews = self.navigationController?.navigationBar.subviews else{
log.info("Attempt to remove right button but subviews don't exist")
return
}
for view in subviews{
if view.tag == 97 {
view.removeFromSuperview()
}
}
}
请仔细阅读 this 答案,其中显示了如何在折叠和较大时管理导航栏标题。它不会给你一个确切的答案,但它一定会帮助你实现你想要的。
除此之外,请仔细阅读 this 答案,这将帮助您了解如何为右侧栏按钮项目提供 x、y 位置。
只是快速概述一下如何通过结合这两个答案来实现您想要的:-
- 根据你想做的导航栏的位置或高度设置右侧栏按钮项的位置。 Link 数字 2 将帮助你做到这一点。
- 当导航栏的高度增加或减少时观察您的导航栏,您可以更改右侧栏按钮项的位置。
完成。通过使用它,您可以管理栏按钮项目在这两个项目上的位置,当您的导航栏被放大时,您可以在不同的位置显示按钮,当导航栏折叠时,您可以在不同的位置显示按钮,以便它更改按钮位置后 vice-versa 您的问题看起来不存在。
我有:
self.title = "Title"
navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
navigationItem.rightBarButtonItem?.tintColor = .white
是否可以使这个 Add
看起来完全像这样 Title
?
像这样:
或此问题的任何其他解决方案 - 标题左侧 - 按钮图像右侧,高度相同?
我在我的应用程序中做了类似的事情 - 不完全是您要找的东西,但应该足够让您继续:
func setupNavBar() {
let rightButton = UIButton()
rightButton.setTitle("Leave", for: .normal)
rightButton.addTarget(self, action: #selector(rightButtonTapped(button:)), for: .touchUpInside)
navigationController?.navigationBar.addSubview(rightButton)
rightButton.tag = 97
rightButton.frame = CGRect(x: self.view.frame.width, y: 0, width: 120, height: 20)
let targetView = self.navigationController?.navigationBar
let trailingConstraint = NSLayoutConstraint(item: rightButton, attribute:
.trailingMargin, relatedBy: .equal, toItem: targetView,
attribute: .trailingMargin, multiplier: 1.0, constant: -16)
let bottomConstraint = NSLayoutConstraint(item: rightButton, attribute: .bottom, relatedBy: .equal,
toItem: targetView, attribute: .bottom, multiplier: 1.0, constant: -6)
rightButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([trailingConstraint, bottomConstraint])
}
我还创建了这个函数来删除它(因此使用上面的标签):
func removeRightButton(){
guard let subviews = self.navigationController?.navigationBar.subviews else{
log.info("Attempt to remove right button but subviews don't exist")
return
}
for view in subviews{
if view.tag == 97 {
view.removeFromSuperview()
}
}
}
请仔细阅读 this 答案,其中显示了如何在折叠和较大时管理导航栏标题。它不会给你一个确切的答案,但它一定会帮助你实现你想要的。
除此之外,请仔细阅读 this 答案,这将帮助您了解如何为右侧栏按钮项目提供 x、y 位置。
只是快速概述一下如何通过结合这两个答案来实现您想要的:-
- 根据你想做的导航栏的位置或高度设置右侧栏按钮项的位置。 Link 数字 2 将帮助你做到这一点。
- 当导航栏的高度增加或减少时观察您的导航栏,您可以更改右侧栏按钮项的位置。
完成。通过使用它,您可以管理栏按钮项目在这两个项目上的位置,当您的导航栏被放大时,您可以在不同的位置显示按钮,当导航栏折叠时,您可以在不同的位置显示按钮,以便它更改按钮位置后 vice-versa 您的问题看起来不存在。