Swift AlertViewController по умолчанию, нарушающий ограничения - программирование
Подтвердить что ты не робот

Swift AlertViewController по умолчанию, нарушающий ограничения

Я пытаюсь использовать AlertViewController по умолчанию со стилем .actionSheet. По какой-то причине предупреждение вызывает ошибку ограничения. До тех пор, пока alertController не сработает (не отобразится) с помощью кнопки, на всем представлении не будет ошибок ограничения. Может быть, это ошибка XCode?

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

2019-04-12 15:33:29.584076+0200 Appname[4688:39368] [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:0x6000025a1e50 UIView:0x7f88fcf6ce60.width == - 16   (active)>"
)

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

Это код, который я использую:

@objc func changeProfileImageTapped(){
        print("ChangeProfileImageButton tapped!")
        let alert = UIAlertController(title: "Change your profile image", message: nil, preferredStyle: .actionSheet)

        alert.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: nil))
        alert.addAction(UIAlertAction(title: "Online Stock Library", style: .default, handler: nil))
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        alert.view.tintColor = ColorCodes.logoPrimaryColor

        self.present(alert, animated: true)
    }

Как видите, это очень просто. Вот почему я очень озадачен странным поведением, которое я получаю, поскольку эта реализация по умолчанию не должна вызывать никаких ошибок, верно?

Output I get

Хотя, преодолев ограничения, предупреждение отображается правильно на всех экранах, я был бы очень благодарен за любую помощь, которую я получил.

4b9b3361

Ответ 1

Эта ошибка не критична, похоже, это нефиксированная ошибка от Apple. Это ограничение появляется в стиле анимации сразу после представления. enter image description here Я пытался поймать и изменить его (изменить значения, отношения, приоритет) перед представлением - безуспешно из-за этого динамически добавленных ограничений.

При отключении анимации в self.present(alert, animated: false) и использовании alert.view.addSubview(UIView()) - ошибка исчезает. Я не могу это объяснить, но это работает!

let alert = UIAlertController(title: "Change your profile image", message: nil, preferredStyle: .actionSheet)

alert.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "Online Stock Library", style: .default, handler: nil))
let cancel = UIAlertAction(title: "Cancel", style: .destructive, handler: nil)

alert.addAction(cancel)
alert.view.addSubview(UIView()) // I can't explain it, but it works!

self.present(alert, animated: false)