Отключить прокрутку отказов для WKWebview в macOS

Попытка отключить прокрутку отказов для WKWebview в macOS, но WKWebview в macOS не имеет "scrollView"

let webView = WKWebView(frame: view.frame)
print(webView.scrollView)

person Alice Chan    schedule 08.10.2016    source источник
comment
Вы уверены? В этой ссылке говорится, что WKWebView имеет scrollView для macOS 10.10+.   -  person Benjamin Lowry    schedule 08.10.2016
comment
@BenjaminLowry Конечно, я щелкаю в WKWebView, и таких вещей нет.   -  person Alice Chan    schedule 08.10.2016


Ответы (2)


Одна действительно странная вещь, которую вы, возможно, заметили, - это то, что в классе WKWebView есть описание scrollView, которое теоретически «предполагается» быть в классе, но scrollView там нет. Это видно на фото ниже:

macOS WKWebView

Я бы сказал, что это может быть странная процедура Apple, но посмотрите, в классе iOS присутствует то же описание, но на этот раз с фактическим scrollView:

введите здесь описание изображения

Если здесь я не упускаю чего-то важного, это, вероятно, будет означать одно из двух:

  1. Должен быть scrollView, но его нет (т.е. он был случайно удален Apple ???)
  2. ScrollView был удален из macOS WKWebView, но описание случайно осталось в классе?

В любом случае это очень странное открытие.

Возможно, вы захотите провести дополнительное исследование по этому поводу и, возможно, заполнить отчет об ошибке Swift .

РЕДАКТИРОВАТЬ:

Мне было указано, что это представление прокрутки на самом деле является свойством только для iOS, а ненужный комментарий - это ошибка.

person Benjamin Lowry    schedule 08.10.2016
comment
Это не имеет ничего общего с языком Swift и не является ошибкой Swift. - person Willeke; 08.10.2016
comment
@ Виллек Не могли бы вы уточнить? Зачем нужно описание пропавшего объекта? - person Benjamin Lowry; 08.10.2016
comment
Похоже на ошибку в шапке. В Objective-C и OS X 10.10 все нормально. Свойство scrollView окружено #if TARGET_OS_IPHONE. Отсутствие scrollView в OS X не является ошибкой Swift. - person Willeke; 08.10.2016
comment
@Willeke, хорошо, спасибо, тогда я обновлю свой ответ - person Benjamin Lowry; 08.10.2016
comment
Кто-нибудь когда-нибудь находил решение этого? Нет ли возможности получить доступ к базовому NSScrollView WKWebView (если он вообще есть)? - person Clifton Labrum; 19.03.2020

Прокрутку можно отключить, переопределив класс WKWebView:

class NoScrollWebView: WKWebView {
    override func scrollWheel(with theEvent: NSEvent) {
        nextResponder?.scrollWheel(with: theEvent)
        return
    }
}

См. Здесь: https://stackoverflow.com/a/62746859/9519322

person Yannic    schedule 05.07.2020
comment
Это не удаляет полосы прокрутки в нижней и правой части webView, а только отключает колесо прокрутки. Пользователь по-прежнему может захватывать полосы прокрутки и перетаскивать их. - person SouthernYankee65; 30.03.2021
comment
Даже webView.enclosingScrollView.hasHorizontalScroller = false и webView.enclosingScrollView.hasVerticalScroller = false не отключают полосы прокрутки. Это безумие, что Apple не исправила это для macOS. - person SouthernYankee65; 30.03.2021
comment
enclosingScrollView - это нечто иное, он дает вам ближайший родительский NSScrollView, который содержит WKWebView, а не scrollview, используемый самим WKWebView. - person hnh; 08.05.2021