我想在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。 我可以在其上添加自定义视图吗?
答案 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