Невозможно расположить элемент barButtonItem в нижнем углу панели навигации. - PullRequest
0 голосов
/ 12 февраля 2019

В настоящее время возникают проблемы при изменении высоты barButtonItem.Я добавил пользовательский вид, и я также использую navBar, который показывает увеличенный заголовок.Я хочу, чтобы элемент navBarButton можно было выбирать, даже когда показывается navBar с большим заголовком, и обновлять позицию barButtonItem так, чтобы он находился рядом с заголовком.BarButtonItem не может быть размещен в нижнем углу navBar, и цель для barButtonItem не будет регистрировать какие-либо щелчки ...

По какой-то странной причине я могу только настроить ширину customView, ноограничение высоты конфликтует с другим ограничением, возможно, в stackView.

Я изменил рамку представления, и расположение customView действительно изменяется при перетаскивании navBar, но он не может зарегистрировать какие-либо действия, так какинтерактивная область ограничена определенной частью панели навигации.Действительно озадачен

Я попытался добавить пользовательский вид в rightBarButtonItem, но в итоге просто изменил кадр вида для обновления в зависимости от размера navBar.

func setupBarItem() {    
    guard let navBar = self.navigationController?.navigationBar else {return}
    let image = UIImage(named: "large_shopping_cart")
    let imageView = UIImageView(image: image)


    imageView.frame.origin.x = 0
    imageView.frame.origin.y = 0
    imageView.frame.size.height = 40
    imageView.frame.size.width = 40
    imageView.frame.inset(by: UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0))
    imageView.backgroundColor = .yellow

    self.imageView = imageView

    self.imageView?.widthAnchor.constraint(equalToConstant: 40).isActive = true
    self.imageView?.heightAnchor.constraint(equalToConstant: 40).isActive = true

    let checkButton = UIBarButtonItem(customView: self.imageView!)

    let otherButton = UIBarButtonItem(image: #imageLiteral(resourceName: "shopping_cart_icon"), landscapeImagePhone: nil, style: .plain, target: self, action: #selector(tappedCheckout(_:)))

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tappedCheckout(_:)))
    print("This is the navbar height when the view loads \(navBar.bounds.height)")

    checkoutBarButtonItem = checkButton

    self.navigationItem.rightBarButtonItem = checkoutBarButtonItem
    self.navigationItem.rightBarButtonItem?.customView?.addGestureRecognizer(tapGestureRecognizer)

    checkoutBarButtonItem?.customView?.layoutIfNeeded()
    navBar.layoutIfNeeded()

}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    guard let navBar = self.navigationController?.navigationBar else {return}

//        print("\(navBar.bounds.height)")

    if navBar.bounds.height > 90 {

        imageView?.frame.origin.x = 0
        imageView?.frame.origin.y = navBar.bounds.height - 50

        imageView?.image = #imageLiteral(resourceName: "large_shopping_cart")

        imageView?.frame.size.height = 40
        imageView?.frame.size.width = 40

    } else {
        imageView?.frame.origin.x = -10
        imageView?.frame.origin.y = 0

        imageView?.frame.size.height = 30
        imageView?.frame.size.width = 30

    }
}
}
...