Программный интерфейс Swift UIContextMenuInteraction Ошибка автоматического макета (groupView) при открытии контекстного меню

У меня есть приложение с программным интерфейсом (без раскадровки). Я добавляю контекстное меню к кнопке своего контроллера просмотра. При открытии этого меню (нажмите и удерживайте кнопку) я получаю предупреждение / ошибку LayoutConstraints в консоли (в противном случае меню работает нормально:

(
    "<NSAutoresizingMaskLayoutConstraint:0x600001c9ed50 h=--& v=--& UIInterfaceActionGroupView:0x7f9d4478ceb0.height == 0   (active)>",
    "<NSLayoutConstraint:0x600001cd7c50 groupView.actionsSequence....height >= 66   (active, names: groupView.actionsSequence...:0x7f9d4610ee00 )>",
    "<NSLayoutConstraint:0x600001cb3de0 UIInterfaceActionGroupView:0x7f9d4478ceb0.top == _UIContentConstraintsLayoutGuide:0x7f9d4478bba0''.top   (active)>",
    "<NSLayoutConstraint:0x600001cb3e80 V:[_UIContentConstraintsLayoutGuide:0x7f9d4478bba0'']-(0)-|   (active, names: '|':UIInterfaceActionGroupView:0x7f9d4478ceb0 )>",
    "<NSLayoutConstraint:0x600001cad090 groupView.actionsSequence....top == _UIContentConstraintsLayoutGuide:0x7f9d4478bba0''.top   (active, names: groupView.actionsSequence...:0x7f9d4610ee00 )>",
    "<NSLayoutConstraint:0x600001cad130 groupView.actionsSequence....bottom == _UIContentConstraintsLayoutGuide:0x7f9d4478bba0''.bottom   (active, names: groupView.actionsSequence...:0x7f9d4610ee00 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600001cd7c50 groupView.actionsSequence....height >= 66   (active, names: groupView.actionsSequence...:0x7f9d4610ee00 )>

этот groupView не мой взгляд! Я установилtranslatesAutoresizingMaskIntoConstraints = falseна всех моих настраиваемых элементах управления (ярлыки, поля и т. д.). Я предполагаю, что мне нужно установить это где-нибудь для контекстного меню, но я не знаю, как и где.

Соответствующий код:

На мой взгляд, контроллер:

        let interaction = UIContextMenuInteraction(delegate: self)
        annotationTypeButton.addInteraction(interaction)

Расширение делегата:

//MARK: - UIContextMenuInteractionDelegate
extension AnnotationDetailsViewController: UIContextMenuInteractionDelegate {
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
        return UIContextMenuConfiguration(identifier: "annotationTypeMenu" as NSCopying, previewProvider: nil) { _ in
            let children: [UIMenuElement] = self.makeAnnotationTypeActions()
            return UIMenu(title: "", children: children)
        }
    }
    
    func makeAnnotationTypeActions() -> [UIAction] {
        var actions = [UIAction]()
        for type in AnnotationType.allCases {
            actions.append( UIAction(title: type.rawValue, image: type.image, identifier: nil, attributes: []) { _ in
                let annotationType = AnnotationType(rawValue: type.rawValue) ?? AnnotationType.tips
                self.annotation.type = annotationType
                self.configureAnnotationTypeButton(with: annotationType)
            })
        }
        return actions
    }
}

Любая помощь приветствуется!

1 ответ

Решение

Я получил ответ на форумах разработчиков Apple, в котором говорилось, что предупреждение о макете является известной проблемой и будет решена в iOS14!

https://developer.apple.com/forums/thread/652622?login=true&page=1#618265022

Другие вопросы по тегам