Как отключить увеличительное стекло в UIWebview? - PullRequest
11 голосов
/ 23 августа 2011

Как я могу отключить увеличительное стекло, которое появляется, когда вы удерживаете прикосновение к UIWebView?Я не хочу отключать взаимодействие с пользователем, но не хочу, чтобы веб-просмотр показывал это стекло зума.Есть идеи?

Ответы [ 5 ]

8 голосов
/ 23 августа 2011

Нет, лупа неразрывно связана с выбором.Чтобы отключить его, вам придется полностью отключить выбор (для этого вы можете использовать -webkit-user-select: none).

7 голосов
/ 29 августа 2012

Поскольку принятое решение у меня не сработало, мне пришлось искать другие варианты, и я нашел один.
Обратите внимание, что я не знаю, одобряет ли Apple эту технику. Используйте это на свой страх и риск.

(Наши не были отклонены; я не думаю, что Apple беспокоится о том, что вы связываетесь с UIWebView внутренностями, но будьте осторожны.)

Я рекурсивно прошел по UIWebView подпредставлениям и перечислил их gestureRecognizers. Всякий раз, когда я сталкиваюсь с UILongPressGestureRecognizer, я устанавливаю enabled на NO.

Это полностью избавляет от увеличительного стекла и, очевидно, отключает любую функцию долгого нажатия по умолчанию.

Кажется, что iOS повторно включает (или заново создает) эти распознаватели жестов всякий раз, когда пользователь начинает редактировать текст.
Ну, я не против использовать увеличительное стекло в текстовых полях, поэтому я не отключаю их сразу.

Вместо этого я жду события blur в моих текстовых элементах, и когда оно происходит, я снова обхожу дерево подпредставления.
Все просто, и это работает.

3 голосов
/ 24 февраля 2012

Потому что я не знаю, как использовать -webkit-user-select: none Я искал другие способы. И я наткнулся на это Настроить контекстное меню UIWebView , затем я объединил его с -webkit-user-select: none.

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
   [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];
}
2 голосов
/ 04 сентября 2014

Я обнаружил, что -webkit-user-select: none; само по себе не помогает. Вместо этого я обнаружил недокументированное свойство -webkit-touch-callout

Что я обычно делаю с приложениями PhoneGap, так это:

body, body * {
    -webkit-user-select: none !important;
    user-select: none !important;
    -webkit-user-callout: none !important;
    -webkit-touch-callout: none !important;
}
input, textarea {
    -webkit-user-select: text !important;
    user-select: text !important;
    -webkit-user-callout: default !important;
    -webkit-touch-callout: default !important;
}

Где-то упоминалось, что -webkit-user-callout является устаревшей версией -webkit-touch-callback, я поставил это на всякий случай.

0 голосов
/ 14 октября 2015

Для нашего проекта Cordova & Swift я сделал:

override init!(webView theWebView: UIWebView!)
    {            
        super.init(webView: theWebView)

        removeLoupe()
    }

    /**
        Removes the magnifying glass by adding a long press gesture that overrides the inherent one that spawns
        a the loupe by default.
    */
    private func removeLoupe()
    {
        let views = webView?.subviews
        if (views == nil || views?.count == 0)
        {
            return
        }

        let longPress = UILongPressGestureRecognizer(target: self, action: "handleLongPress:")
        longPress.minimumPressDuration = 0.045
        longPress.allowableMovement = 100.0

        for view in views!
        {
            if (view.isKindOfClass(UIScrollView))
            {
                let subViews = view.subviews
                let browser = subViews[0]
                browser.addGestureRecognizer(longPress)
                break;
            }
        }
    }

    /**
       Hack to override loupe appearence in webviews.
    */
    func handleLongPress(sender:UILongPressGestureRecognizer)
    {

    }

Обратите внимание, что это мой класс CDVPlugin (точнее, его пользовательская версия).

Убедитесь, что ваш файл config.xml имеет:

<feature name="CustomCDVPlugin">
    <param name="ios-package" value="CustomCDVPlugin" />
    <param name="onload" value="true" />
</feature>

Это обеспечит вызов метода init().

...