【发布时间】:2018-05-09 07:05:11
【问题描述】:
我是 UINavigationBar 的子类,在界面生成器中,我使用 Identity Inspector 将其设置为我的 UINavigationController 的 NavigationBar 的类。问题是,当我覆盖 draw 方法时,navigationBar 的底部边框消失了。这是我的代码:
class YC_NavigationBar: UINavigationBar {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.backIndicatorImage = UIImage(named: "TopBar_Button_Back")!.withRenderingMode(.alwaysOriginal)
self.backIndicatorTransitionMaskImage = UIImage(named: "TopBar_Button_Back")!.withRenderingMode(.alwaysOriginal)
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -200.0), for: .default)
}
override func draw(_ rect: CGRect) {
super.draw(rect)
for i in self.subviews {
if NSStringFromClass(i.classForCoder) == "_UINavigationBarContentView" {
for j in i.subviews {
for constraint in j.constraints {
if constraint.firstAttribute == .leading && NSStringFromClass(constraint.firstItem!.classForCoder) == "_UIModernBarButton" {
constraint.constant = 0
break
}
}
if NSStringFromClass(j.classForCoder) == "_UIButtonBarStackView" {
let ctr = NSLayoutConstraint(item: j, attribute: .trailing, relatedBy: .equal, toItem: i, attribute: .trailing, multiplier: 1, constant: 0)
i.addConstraint(ctr)
}
}
break
}
}
}
}
仅通过覆盖该方法就会发生这种情况真是太荒谬了。我该如何解决这个问题?
【问题讨论】:
标签: ios swift overriding uinavigationbar draw