Как отключить контекстное меню iOS 13?

Для отключения контекстного меню в iOS 13 вам потребуется использовать новый API, представленный Apple - UIContextMenuInteractionDelegate.

Во-первых, вам нужно добавить протокол UIContextMenuInteractionDelegate к вашему представлению (обычно это UIView или UIViewController). Это можно сделать путем расширения с помощью данного протокола:

extension YourViewOrController: UIContextMenuInteractionDelegate {
    // ваши реализации методов делегата
}

Затем вы можете добавить объект UIContextMenuInteraction к вашему представлению. Вам нужно будет создать экземпляр UIContextMenuInteraction, установить его в качестве делегата и добавить его к вашему представлению. Подобно следующему:

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

Теперь вам нужно реализовать методы делегата UIContextMenuInteractionDelegate. Самые важные методы - это contextMenuConfigurationForLocation и willPerformPreviewActionForMenu.

Метод contextMenuConfigurationForLocation вызывается, когда пользователь долгим нажатием вызывает контекстное меню. В этом методе вы должны вернуть объект UIContextMenuConfiguration, который будет определять содержимое и поведение контекстного меню. Если вы хотите отключить контекстное меню, просто верните значение nil из этого метода:

func contextMenuConfigurationForLocation(in _, interaction: UIContextMenuInteraction) -> UIContextMenuConfiguration? {
    return nil
}

Метод willPerformPreviewActionForMenu вызывается, когда пользователь выбирает опцию в контекстном меню. Если вы не хотите выполнять какие-либо действия, просто оставьте этот метод пустым.

Вот полный пример:

extension YourViewOrController: UIContextMenuInteractionDelegate {
    func contextMenuConfigurationForLocation(in _, interaction: UIContextMenuInteraction) -> UIContextMenuConfiguration? {
        return nil
    }
    
    // Можно оставить этот метод пустым, если не нужно выполнять какие-либо действия в контекстном меню.
    func willPerformPreviewActionForMenu(_ _, with _, animator: UIContextMenuInteractionCommitAnimating) {}
}

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

Теперь контекстное меню не будет показываться при долгом нажатии на вашем представлении.