Проблема может быть воспроизведена в простом проекте, как показано ниже:
![enter image description here](https://i.stack.imgur.com/qG3jD.png)
Когда пользователь нажимает кнопку +
на панели навигации, код создает и представляет UIAlertController
в стиле действий.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func buttonTapped(_ sender: Any) {
let actionSheet = UIAlertController(title: nil,
message: nil,
preferredStyle: .actionSheet)
actionSheet.addAction(UIAlertAction(title: "Create Income",
style: .default) { _ in
print("Income!") })
actionSheet.addAction(UIAlertAction(title: "Create Outcome",
style: .default) { _ in
print("Outcome!")})
actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel) { _ in })
self.present(actionSheet, animated: true, completion: nil)
}
}
Пользовательский интерфейс отображается правильно. Проблема заключается в том, что Xcode выдает следующие предупреждения об автоматическом размещении, когда появляется лист действий:
2020-03-12 11:24:57.002113+0800 alertcontroler_test[12757:936231] [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:0x600002d11b30 UIView:0x7f851961c560.width == - 16 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600002d11b30 UIView:0x7f851961c560.width == - 16 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Я проверяю иерархию пользовательского интерфейса в Xcode, когда лист действий появляется, и нахожу, что некоторые подпредставления сопровождаются восклицательным знаком:
![enter image description here](https://i.stack.imgur.com/51Bdi.png)
Я гуглю по этому поводу, но не нахожу людей, сообщающих о подобной проблеме (то есть, предупреждения об автоматическом размещении, когда появляется UIAlertController
). Я нашел некоторую информацию о том, как установить точку останова на UIViewAlertForUnsatisfiableConstraints()
и как отлаживать код сборки. Но я думаю, что это внутренняя проблема в UIAlertController
, и то, как я создаю и представляю UIAlertController
, является распространенным и типичным. Любое предложение, что я должен делать?
Это встречается в последних версиях Xcode (11.3.1) и iOS (13.3). Проблема исчезнет, если я поменяю стиль на предупреждение. Любая помощь будет принята с благодарностью.