PencilKit не может одновременно удовлетворить ограничения
Я пытаюсь реализовать набор инструментов для карандашей (полоска карандаша, ластик и т. Д.), Который появляется в нижней части экрана. Однако после запуска этой строки кода:
guard let window = view.window, let toolPicker = PKToolPicker.shared(for: window)
else {return}
Я получаю следующую ошибку в журнале, и инструмент для выбора не появляется:
PDF Reader[926:85385] [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:0x60000191d450 UIView:0x7fdfb7376ff0.height == 75 (active)>",
"<NSLayoutConstraint:0x60000191d4a0 V:|-(0)-[UIView:0x7fdfb7376ff0] (active, names: '|':PKPaletteContainerView:0x7fdfb737b7e0 )>",
"<NSLayoutConstraint:0x60000191dae0 V:|-(0)-[PKPaletteContainerView:0x7fdfb737b7e0] (active, names: '|':UIView:0x7fdfb46181d0 )>",
"<NSLayoutConstraint:0x60000191dc70 PKPaletteContainerView:0x7fdfb737b7e0.bottom == UIView:0x7fdfb46181d0.bottom (active)>",
"<NSLayoutConstraint:0x600001901ea0 V:|-(0)-[UIView:0x7fdfb46181d0] (active, names: '|':PKPaletteView:0x7fdfb462d3e0 )>",
"<NSLayoutConstraint:0x600001901ef0 UIView:0x7fdfb46181d0.bottom == PKPaletteView:0x7fdfb462d3e0.bottom (active)>",
"<NSLayoutConstraint:0x6000019fcf00 PKPaletteView:0x7fdfb462d3e0.height == 122 (active)>",
"<NSLayoutConstraint:0x60000191d720 UIView:0x7fdfb7376ff0.bottom == PKPaletteContainerView:0x7fdfb737b7e0.bottom (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60000191d450 UIView:0x7fdfb7376ff0.height == 75 (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.
Я не совсем уверен, как обойти ограничения PKPalette или какие ограничения ниже находятся в противоречии. Я также пробовал отключить translatesAutoResizingMaskIntoConstraints, но он не работает, поскольку другие части моего приложения полагаются на него. Любая помощь приветствуется, спасибо!
3 ответа
Я получаю те же сообщения журнала при вызове PKToolPicker на iPhone. На iPad я не получаю ошибок ограничений. Если я просматриваю конфликты ограничений, все кажется внутренним для PKToolPicker и не имеет ничего общего с моей настройкой макета.
Если вы запустите тот же код, но с iPhone в альбомной, а не вертикальной ориентации, конфликтов не возникнет. Поэтому я подозреваю, что ограничения PKPickerTool имеют своего рода ограничение, которое Apple необходимо исправить, когда ширина экрана слишком мала. Я выложу радар.
Это не из-за ограничений; вам нужно вызвать эти строки:
toolPicker.setVisible(true, forFirstResponder: canvasView)
canvasView.becomeFirstResponder()
Вы можете найти больше информации здесь:
https://developer.apple.com/documentation/pencilkit/drawing_with_pencilkithttps://developer.apple.com/videos/play/wwdc2019/221/
У меня такая же ситуация. Если вы установите точку останова макета, я вижу, что все задействованные представления принадлежат Apple, и они даже существуют в частном окне наложения, а не в главном окне. Кажется, это законная ошибка во фреймворке.
Я обнаружил, что у меня ничего не получится, когда я в первый раз попробовал достать инструменты. Чтобы обойти эту проблему, я теперь просто получаю инструменты один раз на очень раннем этапе после запуска. Я не использую их, но это вызывает ошибку, поэтому, когда мне действительно нужны инструменты, они работают.
if #available(iOS 13.0, *) {
PKToolPicker.shared(for: view.window!)
}