В настоящее время возникают проблемы при изменении высоты 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
}
}
}