如何在iOS11中引入的UINavigationBar的大标题视图中添加自定义视图

时间:2017-10-07 12:22:12

标签: ios swift

我想在App Store正在iOS11中的UINavigationBar的大标题视图中添加自定义子视图。 ("用户图标"在右侧)

我们可以通过UINavigationItem.titleView访问传统的导航栏区域,但似乎没有API可以访问大型标题视图区域。

https://developer.apple.com/documentation/uikit/uinavigationitem/ https://developer.apple.com/documentation/uikit/uinavigationbar/

我确认名称是" _UINavigationBarLargeTitleView"使用View Hierarchy Debugger。 我可以在其上添加自定义视图吗?

2 个答案:

答案 0 :(得分:4)

解决方案依靠大标题标签的子视图顺序而不是其私有类名称,以使其符合AppStore准则。

class CustomLargeTitleNavigationBar: UINavigationBar {

    override func didMoveToSuperview() {
        super.didMoveToSuperview()

        if #available(iOS 11.0, *) {
            for subview in subviews {
                if let largeTitleLabel = subview.subviews.first(where: { $0 is UILabel }) as? UILabel {
                    let largeTitleView = subview
                    print("largeTitleView:", largeTitleView)
                    print("largeTitleLabel:", largeTitleLabel)
                    // you may customize the largeTitleView and largeTitleLabel here
                    break
                }
            }
        }
    }
}

答案 1 :(得分:1)

根据这篇文章,我想它应该或多或少是这样的。https://qiita.com/KikurageChan/items/4152c2d8ac89c601a054

import UIKit
@IBDesignable class CustomNavigationBar: UINavigationBar {
override func layoutSubviews() {
    super.layoutSubviews()
    if #available(iOS 11.0, *) {
        for subview in self.subviews {
            let stringFromClass = NSStringFromClass(subview.classForCoder)
            if stringFromClass.contains("UINavigationBarLargeTitleView") {
                //subview.frame.size.height = 30
                // Custom view
                subview.addSub.....

            }
        }
    }
  }
}

CustomNavigationBar