navigationItem.hidesBackButton = true
navigationItem.leftBarButtonItem = nil
head = UIView()
head.frame = CGRectMake(0, 0, 200, 44)
head.frame.origin.x = CGFloat(0)
navigationItem.titleView = head
我尝试将titleView对齐到左边,但它仍然保留在中间。
答案 0 :(得分:5)
尝试一下:
let title = UILabel()
title.text = "TITLE"
let spacer = UIView()
let constraint = spacer.widthAnchor.constraint(greaterThanOrEqualToConstant: CGFloat.greatestFiniteMagnitude)
constraint.isActive = true
constraint.priority = .defaultLow
let stack = UIStackView(arrangedSubviews: [title, spacer])
stack.axis = .horizontal
navigationItem.titleView = stack
这个想法是主视图(在这种情况下为title
)将占据其所需的所有空间,而spacer
视图将占据剩余的所有可用空间。
答案 1 :(得分:1)
我不认为Apple希望你这样做。导航栏有一个非常特定的目的,通常涉及在左上角有一些其他东西,如后退按钮。你可能最好制作一个看起来像导航栏的自定义UIView或UIToolbar。
答案 2 :(得分:1)
您无法将标题视图对齐到左侧。您可以创建标题视图并添加位于其左侧的子视图。如果您希望显示代替后退按钮,那么您应该使用条形按钮项而不是标题视图。
答案 3 :(得分:1)
我有类似的要求,即在导航栏的左侧添加标题和副标题。我无法通过TitleView实现此功能,因为它无法向左对齐。 因此,我采用了@TIMEZ和@Wain的答案以及来自线程here的响应,并添加了完整的答案,以防它对任何人有帮助:
let titleLabel = UILabel()
titleLabel.text = "Pillars"
titleLabel.textAlignment = .center
titleLabel.font = .preferredFont(forTextStyle: UIFont.TextStyle.headline)
let subtitleLabel = UILabel()
subtitleLabel.text = "How did you do today?"
subtitleLabel.textAlignment = .center
subtitleLabel.font = .preferredFont(forTextStyle: UIFont.TextStyle.subheadline)
let stackView = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel])
stackView.distribution = .equalSpacing
stackView.alignment = .leading
stackView.axis = .vertical
let customTitles = UIBarButtonItem.init(customView: stackView)
self.navigationItem.leftBarButtonItems = [customTitles]
答案 4 :(得分:0)
我明白了。
我只需要将自定义UIView设置为leftBarButtonItem。
答案 5 :(得分:0)
您可以将titleView约束到navigationBars leftAnchor。
private func setupNavigationBarTitleView() {
let titleView = YourCustomTitleView()
navigationBarTitleView = titleView
navigationBarTitleView?.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = navigationBarTitleView
if let navigationBar = navigationController?.navigationBar {
NSLayoutConstraint.activate([
titleView.leadingAnchor.constraint(equalTo: navigationBar.leadingAnchor, constant: 16),
titleView.heightAnchor.constraint(equalToConstant: 36)
])
}
}
答案 6 :(得分:0)
如果它是自定义的UIView,请覆盖internalContentSize并返回
CGSize(width: .greatestFiniteMagnitude, height: UIView.noIntrinsicMetric)
这会将视图拉伸到左右条形按钮项目之间的整个宽度。
答案 7 :(得分:0)
最简单的解决方案是为标题宽度添加低优先级约束。
let titleLabel = UILabel()
titleLabel.textAlignment = .left
...
let c = titleLabe.widthAnchor.constraint(equalToConstant: 10000)
c.priority = .required - 1
c.isActive = true
navigationItem.titleView = titleLabel