Swift: Выровненные большие титры при вращении из ландшафта - PullRequest
0 голосов
/ 11 февраля 2019

У меня странная проблема с большим заголовком, когда заголовок смещается, когда я поворачиваю устройство из пейзажа в портрет.Вы можете видеть gif как приложенный:

enter image description here

Я не слишком уверен, если это из-за пользовательского 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
} 

Результаты на данный момент:

enter image description here

Как вы можете видеть, вращение вращается назад как regularTitle.Можно повернуть назад как largeTitle?

...