在我的 UIKit 應用程式中,我設定了一個帶有 5 個按鈕的 UIToolbar,如下所示:
class BrowserToolbar: UIToolbar {
let goBackButton = UIBarButtonItem(image: UIImage(systemName: "chevron.left"), style: .plain, target: nil, action: nil)
let goForwardButton = UIBarButtonItem(image: UIImage(systemName: "chevron.right"), style: .plain, target: nil, action: nil)
let shareButton = UIBarButtonItem(image: UIImage(systemName: "square.and.arrow.up"), style: .plain, target: nil, action: nil)
let bookmarkButton = UIBarButtonItem(image: UIImage(systemName: "book"), style: .plain, target: nil, action: nil)
let tabsButton = UIBarButtonItem(image: UIImage(systemName: "square.on.square"), style: .plain, target: nil, action: nil)
override init(frame: CGRect) {
// If toolbar frame size is not set then autolayout breaks so we need to set it manually
// https://stackoverflow.com/questions/59700020/layout-constraint-errors-with-simple-uitoolar-for-keyboard-inputaccessoryview
super.init(frame: CGRect(origin: .zero, size: CGSize(width: 100, height: 100)))
setupButtons()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
private extension BrowserToolbar {
func setupButtons() {
items = [
goBackButton,
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
goForwardButton,
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
shareButton,
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
bookmarkButton,
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
tabsButton
]
}
}
結果如下所示:
如您所見,按鈕未正確居中。我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
系統圖片大小不一樣,所以彈性空間剛好填滿按鈕之間的空間,而按鈕只用完圖片提供的寬度。
從視圖層次結構:
如果您對所有 UIBarButtons 使用相同的影像,您將看到它們正確對齊:
因此,解決方案是創建您自己的相同大小的影像資源,或者找到一種方法在 UIBarButton 內為影像提供固定寬度。有一些 SO 答案可以解釋這一點,但我還沒有嘗試過。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528934.html