Я создал пользовательский UIView, который функционирует как TabBar для моего приложения. TabBar имеет 3 кнопки, которые функционируют как элементы навигации, каждый раз, когда элемент нажимается, он имеет цвет фона, который является другим UIView, который я создал программно.
Он отлично работает в iPhone X, XS, XS MAX и 8 Plus, проблема возникает в iPhone 8. Кадр UIView x больше, чем должен быть, я попытался layoutIfNeeded и layoutSubviews без успеха. Кроме того, после нажатия на другой элемент TabBar и возврата к поврежденному элементу, он был исправлен.
Код выглядит так:
func tabBarSelected(selected: Bool, tabBarButton: UIButton) {
if selected {
let point = self.viewTabBar.convert(tabBarButton.frame, to: self.viewTabBar)
let backgroundView = UIView(frame: point)
backgroundView.tag = AppConstants.Keys.Defines.BackgroundViewTag
backgroundView.backgroundColor = .navigationBarBackgroundColor()
backgroundView.alpha = 0.0
backgroundView.layer.cornerRadius = 5.0
self.viewTabBar.addSubview(backgroundView)
self.viewTabBar.bringSubviewToFront(tabBarButton)
UIView.animate(withDuration: 0.2, animations: {
backgroundView.alpha = 0.5
}) { (complete) in
}
} else {
let backgroundView = self.viewTabBar.viewWithTag(AppConstants.Keys.Defines.BackgroundViewTag)
UIView.animate(withDuration: 0.2, animations: {
backgroundView?.alpha = 0.0
}) { (complete) in
backgroundView?.removeFromSuperview()
}
}
}
Кадры в начале выглядят так :
DEBUG: Button frame: (306.0, 8.0, 100.0, 38.0)
И после нажатия другой кнопки и возврата к указанному c пункту:
DEBUG: Button frame: (276.5, 8.0, 90.5, 37.0)
В чем проблема?
Вот как это выглядит:
Вот как я планировал: