【问题标题】:iOS. UINavigationBar with custom height -> vertically center titleView & barButtonItemsIOS。具有自定义高度的 UINavigationBar -> 垂直居中 titleView 和 barButtonItems
【发布时间】:2017-04-18 21:46:18
【问题描述】:

我有一个自定义UINavigationBar

class NavBar: UINavigationBar {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.commonInit()
    }

    private func commonInit() {
        self.barTintColor = .orange

    }

    override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: UIScreen.main.bounds.width, height: 66)
    }

}

当我设置titleView 和/或barButtonItems 时,它们不是垂直居中的:

class ViewController : UIViewController {

    override func viewDidLoad() {
        self.viewDidLoad()

        self.edgesForExtendedLayout = []

        let searchField = UITextField(frame: CGRect(x: 0, y: 0, width: 100, height: 44))
        searchField.backgroundColor = .green
        self.navigationItem.titleView = searchField

    }


}

结果:

UINavigationBar 的高度不是默认值时,如何将textViewbarButtonItems 垂直居中?

我已尝试设置 textViewboundsframe - 不起作用。

与:

        let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 44))
        view.backgroundColor = .green
        let searchField = UITextField(frame: CGRect(x: 0, y: -20, width: 100, height: 44))
        searchField.backgroundColor = .red
        view.addSubview(searchField)
        self.navigationItem.titleView = view

我可以改变searchField的位置,但是好像我做错了。

我可以在NavBar 类中以某种方式设置UINavigationBar 'padding'/'margin' 或textViewbarButtonItem offset 吗?

【问题讨论】:

标签: ios objective-c swift uikit


【解决方案1】:

你现在基本上是在破解 UINavigationBar 这就是为什么我不期望它有稳定的行为。苹果不鼓励你这样做。即使在Apple example of extended UINavBar 中,他们也只是添加了另一个视图,并使栏和视图之间的过渡无缝。你也可以试试

setTitleVerticalPositionAdjustment(_:for:)

方法,但我相信它只影响标题而不影响标签栏项目。我会使用苹果解决方案来避免意外问题或在不继承 UINavBar 的情况下创建自定义导航栏。

【讨论】:

  • 这就是我想要达到的目标:i.stack.imgur.com/uKaDh.png 所以你认为最好使用UIView 而不是UINavigationBar 上的“黑客”?
  • 是的,您没有利用 UINavigationBar 的可能性,并且您可以更好地控制自定义视图中发生的事情,所以我会选择 UIView,但这完全取决于您.
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多