hidesBarsOnSwipe не работает для пользовательской панели навигации - PullRequest
0 голосов
/ 30 марта 2020

Итак, у меня есть контроллер навигации и настраиваемая панель навигации. Проблема в том, что без какой-либо настройки панель навигации реагирует на 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, я могу справиться с обоими из них.

...