ActionSheet UIAlertController выдает ошибку ограничения на iOS 12.2/12.3

В iOS 12.2 при использовании UIAlertController actionSheet Xcode выдает ошибку ограничения. У кого-нибудь есть эта проблема?

Этот же код работает на iOS 12.1 без ошибок.

Я тестировал этот код на Xcode 10.2 и 10.1.

class ViewController: UIViewController {
    
    let Click : UIButton = {
        let button = UIButton(type: UIButton.ButtonType.system)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.setTitle("OK", for: .normal)
        button.tintColor = UIColor.blue
        button.addTarget(self, action: #selector(click(_:)), for: UIControl.Event.touchUpInside)
        return button
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(Click)
        Click.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        Click.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }

    
    @objc func click(_ sender: UIButton) {
        let optionMenu = UIAlertController(title: nil, message: "Choose Option", preferredStyle: .actionSheet)
        
        let deleteAction = UIAlertAction(title: "Delete", style: .default)
        let saveAction = UIAlertAction(title: "Save", style: .default)
    
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
        
        optionMenu.addAction(deleteAction)
        optionMenu.addAction(saveAction)
        optionMenu.addAction(cancelAction)
        
        self.present(optionMenu, animated: true, completion: nil)
    }

}
[LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x6000001b6ee0 UIView:0x7fe3b6513020.width == - 16   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000001b6ee0 UIView:0x7fe3b6513020.width == - 16   (active)>

PS:

Просто чтобы убедиться, что проблема в UIAlertController, я удалил все и обновил код, как показано ниже, но получил ту же ошибку:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        let optionMenu = UIAlertController(title: "Test", message: "Choose Option", preferredStyle: .actionSheet)
        
        let deleteAction = UIAlertAction(title: "Delete", style: .default)
        let saveAction = UIAlertAction(title: "Save", style: .default)
        
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
        
        optionMenu.addAction(deleteAction)
        optionMenu.addAction(saveAction)
        optionMenu.addAction(cancelAction)
        
        self.present(optionMenu, animated: true, completion: nil)
    }
    
}

person L03n    schedule 27.03.2019    source источник
comment
Я проверил ваш код, он работает отлично. Вы можете предоставить реальный снимок экрана   -  person Sanad Barjawi    schedule 27.03.2019
comment
@SanadBarjawi imgur.com/Hek2eQT вот ошибка. эта проблема возникает только на iOS 12.2   -  person L03n    schedule 27.03.2019
comment
какая у вас версия xCode?   -  person Sanad Barjawi    schedule 27.03.2019
comment
@SanadBarjawi протестирован на Xcode 10.2 и Xcode 10.1 на iOS 12.1 и 12.2, проблема проявляется только на iOS 12.2   -  person L03n    schedule 27.03.2019
comment
попробуйте дать кнопке Click фиксированную ширину   -  person Sanad Barjawi    schedule 27.03.2019
comment
@SanadBarjawi Я сделал. кнопка не проблема.   -  person L03n    schedule 27.03.2019
comment
это происходит, если вы прокомментировали код actionSheet?   -  person Sanad Barjawi    schedule 27.03.2019
comment
@SanadBarjawi без actionSheet без ошибок   -  person L03n    schedule 27.03.2019
comment
я думаю, что эта проблема связана с родительским представлением, поэтому попробуйте добавить еще одно родительское представление с нулями в качестве начальных конечных элементов сверху и снизу, а затем добавьте к нему свои текущие элементы (это только для тестирования)   -  person Sanad Barjawi    schedule 27.03.2019
comment
@SanadBarjawi Я добавляю tempView с нулями в конце вверху и внизу. затем добавил кнопку в этом представлении. но та же проблема, я не думаю, что проблема в кнопке. Что-то не так с UIAlertController в iOS 12.2. просто чтобы убедиться, что это не кнопка, я полностью удаляю другой код и просто помещаю код UIAlertController в ViewDidAppear. та же проблема   -  person L03n    schedule 27.03.2019
comment
в viewDidLoad попробуйте view.layoutIfNeeded()   -  person Sanad Barjawi    schedule 27.03.2019
comment
@SanadBarjawi нет, не работает.   -  person L03n    schedule 27.03.2019
comment
предположим, что это проблема обновления 12.2, тогда   -  person Sanad Barjawi    schedule 27.03.2019
comment
У меня такая же проблема в Xcode 10.2 под управлением iOS 12.2 - думаю, это ошибка! Я планирую просто игнорировать это.   -  person Becky Hansmeyer    schedule 29.03.2019
comment
Та же проблема с 12.2. В 12.1 такой проблемы нет.   -  person Alexey Chekanov    schedule 08.04.2019
comment
Я также испытываю ту же проблему с iOS 12.2.   -  person FE_Tech    schedule 13.04.2019
comment
Дубликат ограничения нарушения Swift по умолчанию AlertViewController, мы также можем объединить их. И, пожалуйста, отправьте отчет об ошибке.   -  person matt    schedule 14.04.2019
comment
У меня точно такая же проблема: iOS 12.2 с листом действий iPhone, я использую код Objective-C, и один и тот же код работает годами, он регистрирует эту ошибку только для iOS 12.2.   -  person sean3033    schedule 17.04.2019
comment
@matt Я сообщаю Apple о проблеме. ожидание ответа, и Swift default AlertViewController, нарушающие ограничения, является повторяющимся. эта проблема возникла задолго до той, которую вы упомянули в ссылке. поправьте меня, если я ошибаюсь.   -  person L03n    schedule 19.04.2019
comment
Даже с 12.3 XCode 10.2.1   -  person Rajan Maheshwari    schedule 27.05.2019
comment
Та же проблема здесь. iOS 12.3.1   -  person unixb0y    schedule 05.07.2019
comment
Обходной путь — найти ограничение с константой ‹ 0 и понизить его приоритет. if let limiteds = alertViewController.view?.subviews.first?.constraints { для ограничения в ограничениях { if ограничение.константа ‹ 0 { ограничение.приоритет = UILayoutPriority(rawValue: ограничение.приоритет.rawValue - 1) } } }   -  person Denis Bystruev    schedule 30.09.2020
comment
Другой способ — инвертировать константу, чтобы сделать ее положительной: }   -  person Denis Bystruev    schedule 30.09.2020


Ответы (1)


Это ошибка в версиях для iOS:

  • 12.2
  • 12.3
  • 12.4
  • 13.0
  • 13.1
  • 13.2
  • 13.2.3
  • 13.3
  • 13.4
  • 13.4.1
  • 13.5
  • 13.5.1
  • 13.6
  • 14.0
  • 14.1
  • 14.2
  • 14.4

Единственное, что мы можем сделать, это отправить отчет об ошибке в Apple (я только что сделал это, и вы тоже должны это сделать).

Я постараюсь обновить ответ для новых версий iOS, если ошибка все еще будет присутствовать. Помощь приветствуется.

person Andrei Konstantinov    schedule 02.06.2019
comment
Ошибка сохраняется в iOS 13 beta 2. - person nugae; 27.06.2019
comment
продолжается в бета-версии 7 - person Fabiosoft; 04.09.2019
comment
продолжается в официальной версии iOS 13 - person Husam; 24.09.2019
comment
Проверка iOS 13.2, проблема остается - person Lee Jarvis; 29.10.2019
comment
продолжается в iOS 13.2.3 - person Benjamin Hutter; 24.11.2019
comment
Он также присутствует в iOS 13.3. - person Alec; 12.12.2019
comment
я смеюсь каждый раз когда вижу это обновление - person jwhat; 17.02.2020
comment
iOS 13.4 и дальше… - person bauerMusic; 02.04.2020
comment
iOS 13.4.1 тоже - person Eric; 15.05.2020
comment
Я снова заметил эту ошибку сегодня на iOS 13.4.1. Забавно, что я разговаривал с одним из инженеров Apple во время прошлогодней конференции WWDC, и они сказали, что знают об этом, и это должно быть исправлено в iOS 13.0. Ну, может iOS 14.0. - person mikro098; 21.05.2020
comment
iOS 13.5 также имеет эту проблему - person Max Polkovnik; 22.05.2020
comment
все еще присутствует в iOS 13.5 - person Mark T.; 24.05.2020
comment
Это на самом деле весело - person Zaya; 08.06.2020
comment
22 июня 2020 г., все еще вижу эту ошибку. Это смешно. - person Raymond; 22.06.2020
comment
Все еще здесь, на iOS 14 beta 2 - person Kyle Horkley; 21.07.2020
comment
все еще присутствует в 13.6 - person crackity_jones; 17.08.2020
comment
все еще здесь на iOS 14 - person salfaris; 18.09.2020
comment
Продолжение на iOS 14 - person diegodsp; 05.10.2020
comment
Постоянно вижу это в iOS 14 - person Andrew Edwards; 14.10.2020
comment
Все еще присутствует в iOS 14.4. - person MattCodes; 08.03.2021
comment
Это действительно весело. ВТФ, Эппл?! ???? Подан отчет об ошибке. - person VoodooBoot; 26.03.2021
comment
Похоже, они исправили это в iOS 14.5 — протестировано в проекте Swift 5/Xcode 12.5/iOS 12.3 с симулятором iPhone SE2. В том же проекте симулятор iPhone SE 12.4 регистрирует сообщение в консоли. - person Neph; 05.05.2021