У меня странная проблема с большим заголовком, когда заголовок смещается, когда я поворачиваю устройство из пейзажа в портрет.Вы можете видеть gif как приложенный:
Я не слишком уверен, если это из-за пользовательского BarButtonItem, но после выполнения прокрутки,title восстанавливает исходную позицию.
Мой код как таковой:
lazy var profileImageButton: UIButton = {
let b = UIButton(type: .system)
b.addTarget(self, action: #selector(openSideMenu), for: .touchUpInside)
b.setImage(UIImage(named: "testImage")?.withRenderingMode(.alwaysOriginal), for: .normal)
b.imageView?.contentMode = .scaleAspectFill
b.imageView?.clipsToBounds = true
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
var compactConstraints: [NSLayoutConstraint] = []
var regularConstraints: [NSLayoutConstraint] = []
var heightContraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
func setupUI() {
navigationItem.title = "Overview"
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: profileImageButton)
navigationController?.navigationBar.prefersLargeTitles = true
setupProfileImageButtonConstraints()
}
func setupProfileImageButtonConstraints() {
heightContraint = profileImageButton.heightAnchor.constraint(equalToConstant: 36)
heightContraint.priority = UILayoutPriority(999)
compactConstraints = [
profileImageButton.widthAnchor.constraint(equalToConstant: 20),
profileImageButton.heightAnchor.constraint(equalToConstant: 20)]
regularConstraints = [
profileImageButton.widthAnchor.constraint(equalToConstant: 36),
heightContraint
]
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if traitCollection.verticalSizeClass == .compact {
NSLayoutConstraint.deactivate(regularConstraints)
NSLayoutConstraint.activate(compactConstraints)
profileImageButton.imageView?.layer.cornerRadius = 10
} else if traitCollection.verticalSizeClass == .regular {
NSLayoutConstraint.deactivate(compactConstraints)
NSLayoutConstraint.activate(regularConstraints)
profileImageButton.imageView?.layer.cornerRadius = 18
}
}
Есть ли способ избежать такого смещения?
РЕДАКТИРОВАТЬ:
Попытка следующего кода внутри моего tabBarController
как общего доступа:
override var shouldAutorotate: Bool {
if let viewController = self.viewControllers?[self.selectedIndex] {
return viewController.shouldAutorotate
}
return super.shouldAutorotate
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
if let viewController = self.viewControllers?[self.selectedIndex] {
return viewController.supportedInterfaceOrientations
}
return super.supportedInterfaceOrientations
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
if let viewController = self.viewControllers?[self.selectedIndex] {
return viewController.preferredInterfaceOrientationForPresentation
}
return super.preferredInterfaceOrientationForPresentation
}
Результаты на данный момент:
Как вы можете видеть, вращение вращается назад как regularTitle
.Можно повернуть назад как largeTitle
?