Итак, у меня есть контроллер навигации и настраиваемая панель навигации. Проблема в том, что без какой-либо настройки панель навигации реагирует на hidesBarsOnSwipe
так, как должна, но из-за настройки она больше не работает.
class HomeNavigationViewController: UINavigationController {
@IBOutlet weak var topBar: UINavigationBar!
override func viewDidLoad() {
super.viewDidLoad()
let offset: CGFloat = view.safeAreaInsets.top
let safeAreaSize = view.frame.size
topBar.prefersLargeTitles = true
func getHeightAndRect(_ view: UIView) -> CGRect {
if view.frame.height >= 750 {
let rect = CGRect(x: 0, y: -offset - 100, width: (safeArea.width), height: (topBar.bounds.height) + offset + 600)
return rect
} else {
let rect = CGRect(x: 0, y: -offset - 100, width: (safeArea.width), height: (topBar.bounds.height) + offset + 500)
return rect
}
}
let rect = getHeightAndRect(view)
topBar.isTranslucent = false
topBar.tintColor = UIColor.red
topBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
topBar.shadowImage = UIImage()
topBar.backgroundColor = UIColor.white
let shadowView = UIView(frame: rect)
shadowView.backgroundColor = UIColor.white
let shadowLayer = CAShapeLayer()
shadowLayer.path = UIBezierPath(roundedRect: shadowView.bounds, byRoundingCorners: [.bottomLeft , .bottomRight], cornerRadii: CGSize(width: 20, height: 20)).cgPath
shadowLayer.fillColor = UIColor.white?.cgColor
topBar.addSubview(shadowView)
shadowLayer.shadowColor = UIColor.darkGray.cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowOffset = CGSize(width: 2.0, height: 2.0)
shadowLayer.shadowOpacity = 0.6
shadowLayer.shadowRadius = 3
shadowView.layer.insertSublayer(shadowLayer, at: 0)
let label = UILabel(frame: rect)
label.textAlignment = NSTextAlignment.center
label.text = "Home"
let titleLabelView = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40))
titleLabelView.backgroundColor = UIColor.clear
titleLabelView.textAlignment = .center
titleLabelView.textColor = UIColor.black
titleLabelView.font = UIFont(name: "Futura-Medium", size: 24)
titleLabelView.adjustsFontSizeToFitWidth = true
titleLabelView.text = "Home"
let labelView: UIView = titleLabelView
topBar.insertSubview(labelView, aboveSubview: shadowView)
// print(labelView.center)
let yCoordNavItem = labelView.center.y
func getHeightAndTitle(_ view: UIView) -> CGPoint {
if view.frame.height >= 750 {
return CGPoint(x: safeArea.width/2, y: yCoordNavItem + 25 )
} else {
return CGPoint(x: safeArea.width/2, y: yCoordNavItem)
}
}
let titleCenter = getHeightAndTitle(view)
labelView.center = titleCenter
navigationController?.hidesBarsOnSwipe = true
// Do any additional setup after loading the view.
}
}
Любым способом, которым я мог бы go вокруг это? Панель навигации просто ничего не делает, когда я смахиваю. На контроллере представления также есть коллекционное представление, которое я могу сильно ударить. navigationController?.hidesBarsOnSwipe = true
отлично работает без настройки бара.
Также приветствуются ответы Swift или Objective- C, я могу справиться с обоими из них.