【发布时间】:2021-09-25 08:16:41
【问题描述】:
以下是从我的项目中提炼出来的一小段演示代码。它由一个 UINavigationBar、UINavigationItem 和几个 UIBarButtonItems 组成。点击 barButtonItem 会突出显示它并使其他变暗。这样做,字体大小发生变化是可以理解的,但我希望 barButtonItems 本身的大小是固定的。这样,当我随机点击 barButtonItems 时,它们似乎不会随着标题文本的收缩和扩展而抖动。如何让 barButtonItems 在标题文本更改时抵抗调整大小?
import UIKit
class ViewController: UIViewController {
var barButtonItems: [UIBarButtonItem]!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .darkGray
let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 100, width: view.frame.width, height: 40))
navBar.barTintColor = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(navBar)
let navItem = UINavigationItem()
let appleBarBtnItem = UIBarButtonItem(title: "Apple", style: .plain, target: self, action: #selector(barItemTapped))
let bananaBarBtnItem = UIBarButtonItem(title: "Banana", style: .plain, target: self, action: #selector(barItemTapped))
let kiwiBarBtnItem = UIBarButtonItem(title: "Kiwi", style: .plain, target: self, action: #selector(barItemTapped))
let pearBarBtnItem = UIBarButtonItem(title: "Pear", style: .plain, target: self, action: #selector(barItemTapped))
let orangeBarBtnItem = UIBarButtonItem(title: "Orange", style: .plain, target: self, action: #selector(barItemTapped))
barButtonItems = [appleBarBtnItem, bananaBarBtnItem, kiwiBarBtnItem, pearBarBtnItem, orangeBarBtnItem]
navItem.leftBarButtonItems = barButtonItems
navBar.setItems([navItem], animated: false)
setCurrentBarItem(appleBarBtnItem)
}
func setCurrentBarItem(_ barBtnItem: UIBarButtonItem) {
for btn in barButtonItems {
highlight(btn, turnedOn: (btn == barBtnItem) )
}
}
func highlight(_ button: UIBarButtonItem, turnedOn: Bool) {
button.tintColor = #colorLiteral(red: 0.7230747342, green: 0.9554787278, blue: 0.9893732667, alpha: 1)
let weight: UIFont.Weight = turnedOn ? .bold : .thin
let attributes: [NSAttributedString.Key : Any] = [ .font: UIFont.systemFont(ofSize: 20, weight: weight)]
button.setTitleTextAttributes(attributes, for: .normal)
}
@objc func barItemTapped(_ sender: UIBarButtonItem) {
setCurrentBarItem(sender)
}
}
【问题讨论】:
标签: swift size uibarbuttonitem