Симулятор iPhone X Series - сохранить получение сбоя нераспознанного селектора, отправленного на экземпляр со всеми кнопками - PullRequest
0 голосов
/ 16 июня 2019

Я нахожусь на Xcode 10.1, и симулятор тоже версии 10.1, но это случилось и с предыдущей версией прошлого года. Я не беспокоился об этом, потому что я создавал базовый интерфейс и бэкэнд, поэтому я пропустил его. Теперь я почти готов к запуску, и теперь мне нужно протестировать серию X.

Всякий раз, когда я использую любой другой обычный симулятор iPhone от 5S - 8 + проблем нет, все нормально , я нажимаю кнопку и действие происходит. У меня iPhone 7+ и кнопки работают нормально , используя фактическое устройство .

Но всякий раз, когда я использую симулятор и выбираю любое из устройств iPhone X серии, когда я нажимаю любую кнопку в любую просмотр контроллера у меня всегда происходит сбой

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [_ UIBackButtonContainerView titleLabel]: нераспознанный селектор, отправленный экземпляру 0x7fdd99c759e0'

что бы это ни было, проблема в серии X [_UIBackButtonContainerView titleLabel]

Я запускаю Xcode в режиме отладки:

enter image description here

В чем может быть проблема?

enter image description here

1048 * код-*

lazy var loginButton: UIButton = {
    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("Login", for: .normal)
    button.setTitleColor(UIColor.white, for: .normal)
    button.titleLabel?.font = UIFont(name: "ArialRoundedMTBold", size: 19)
    // I also tried commenting out button.titleLabel?.font = UIFont(name: "ArialRoundedMTBold", size: 19)
    button.backgroundColor = UIColor.lightGray
    button.addTarget(self, action: #selector(loginButtonPressed), for: .touchUpInside)
    button.clipsToBounds = true
    button.layer.cornerRadius = 5
}()

@objc func loginButtonPressed() {
    // do something
}

override func viewDidLoad() {
    super.viewDidLoad()

    // there is a username textfield and a password textField above the button

    view.addSubview(loginButton)

    loginButton.topAnchor.constraint(equalTo: passwordTextField.bottomAnchor, constant: 8).isActive = true
    loginButton.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16).isActive = true
    loginButton.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16).isActive = true

    if UIScreen.main.bounds.width == 320 {

        loginButton.heightAnchor.constraint(equalToConstant: 40).isActive = true
    } else {

        loginButton.heightAnchor.constraint(equalToConstant: 45).isActive = true
    }
}

Вот изображение кнопки с оператором печати в действии:

enter image description here

Вот изображение аварии:

enter image description here

enter image description here

1 Ответ

1 голос
/ 16 июня 2019

Мне удалось сузить ошибку с помощью комментария @matt, сделанного в комментариях, он сказал I'm having quite a lot of trouble understanding what any of the code you've shown could possibly have to do with UIBackButtonContainerView. It seems to me we want to be looking at your back button, not this loginButton.Когда он сказал, что я посмотрел на другие части моего кода.

Этот LoginVC с проблемой - root vc, и у меня нет barButtonItem, но я использовал эту строку кода ниже, чтобы скрытьтекст в элементе backBarButton в vc, который вставлялся так, чтобы отображалась только стрелка назад.

Это в родительском vc, который нажимает:

// LoginVC with loginButton inside of it
navigationItem.backBarButtonItem = UIBarButtonItem(title: nil, style: .plain, target: nil, action: nil)

Это на дочернем виртуальном канале, на который давят:

// child vc that’s getting pushed on
if view.frame.width == 414 && view.frame.height == 896 || view.frame.width == 375 && view.frame.height == 812  {

    navigationController?.navigationBar.prefersLargeTitles = true
} else {

    navigationController?.navigationBar.prefersLargeTitles = false
}

Я понятия не имею, почему я могу использовать это без проблем с iPhone 5,6,7 и 8 серий, но не с серией X,Когда я это прокомментировал, это сработало.

Чтобы заставить его работать и все еще скрывать текст в следующем виртуальном канале, мне пришлось изменить код на:

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

Разница в том,параметр title:.

Когда он не работал, я установил параметр на nil.

Чтобы заставить его работать, я установил пустые кавычки: ""

Очень странная проблема ???

ОБНОВЛЕНИЕ при дальнейшей проверке проблема связана с

navigationController?.navigationBar.prefersLargeTitles = true

Кажется, вы не можете использоватьКод выше И установите заголовок backBarButton на ноль.Я думаю, Apple хочет убедиться, что какой-то текст присутствует при использовании больших заголовков навигационной панели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...