Я нашел пару вопросов с предыдущими ответами:
- если вы добавите подпредставление: после поворота устройства граница больше не будет иметь правильную рамку
- если вы установите для shadowImage значение nil, вы не сможете настроить тень панели навигации.
Один из способов решить эту проблему - использовать autolayout:
extension UINavigationBar {
func setBottomBorderColor(color: UIColor, height: CGFloat) -> UIView {
let bottomBorderView = UIView(frame: CGRectZero)
bottomBorderView.translatesAutoresizingMaskIntoConstraints = false
bottomBorderView.backgroundColor = color
self.addSubview(bottomBorderView)
let views = ["border": bottomBorderView]
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[border]|", options: [], metrics: nil, views: views))
self.addConstraint(NSLayoutConstraint(item: bottomBorderView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: height))
self.addConstraint(NSLayoutConstraint(item: bottomBorderView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1.0, constant: height))
return bottomBorderView
}
}
Причина, по которой я возвращаю границу, заключается в том, что во время вращения вы видите ее в середине navigation bar
, поэтому я скрываю ее во время вращения.