macOS, Swift
Is it possible to remove the scroll in WebKit View? (or make it not visible)
I have a WebKit View from library and I have made the connection to the ViewController.swift:
@IBOutlet weak var webView1: WKWebView!
macOS, Swift
Is it possible to remove the scroll in WebKit View? (or make it not visible)
I have a WebKit View from library and I have made the connection to the ViewController.swift:
@IBOutlet weak var webView1: WKWebView!
In MacOS, I tested this:
Subclass and implement scrollWheel:
func scrollWheel(with event: NSEvent)
https://stackoverflow.com/questions/43961952/disable-scrolling-of-wkwebview-in-nsscrollview
See here
openradar.appspot.com/51328335
Code is
import Cocoa
import WebKit
class MyWKWebView: WKWebView {
override func scrollWheel(with event: NSEvent) {
print("NoScroll") // Just to see scroll did not occur
}
}
class WebViewController: NSViewController, WKUIDelegate {
var webView: MyWKWebView!
override func loadView() {
super.loadView()
let webConfiguration = WKWebViewConfiguration()
webView = MyWKWebView(frame: CGRect(x: 0, y: 0, width: 300, height: 300), configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
var myURL: URL!
myURL = URL(string: "https://developer.apple.com/")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
webView.allowsMagnification = true
webView.magnification = 0.25
webView.setMagnification(0.25, centeredAt: CGPoint(x: 150, y: 150))
}
}
WkWebView is very opaque. It is almost always a better idea to do such things in CSS or Javascript inside the view.
Things are easy in iOS? Are you in MacOS app ?
In that case, you may have to subclass and implement scrollWheel:
func scrollWheel(with event: NSEvent)
https://stackoverflow.com/questions/43961952/disable-scrolling-of-wkwebview-in-nsscrollview
in iOS:
There is a scrollView associated to the webView:
webView.scrollView
Not sure it works in MacOS (except Catalyst)
See discussion here on WebView in MacOS
https://stackoverflow.com/questions/34363924/webview-vs-wkwebview-on-osx
Did you try to set its
isScrollEnabled property to false ?
Or use those properties (iOS):
var showsHorizontalScrollIndicator: Bool
A Boolean value that controls whether the horizontal scroll indicator is visible.
var showsVerticalScrollIndicator: Bool
A Boolean value that controls whether the vertical scroll indicator is visible.
In MacOS, there are
var hasHorizontalScroller: Bool
A Boolean that indicates whether the scroll view has a horizontal scroller.
var hasVerticalScroller: Bool
A Boolean that indicates whether the scroll view has a vertical scroller.
In MacOS, I tested this:
Subclass and implement scrollWheel:
func scrollWheel(with event: NSEvent)
https://stackoverflow.com/questions/43961952/disable-scrolling-of-wkwebview-in-nsscrollview
See here
openradar.appspot.com/51328335
Code is
import Cocoa
import WebKit
class MyWKWebView: WKWebView {
override func scrollWheel(with event: NSEvent) {
print("NoScroll") // Just to see scroll did not occur
}
}
class WebViewController: NSViewController, WKUIDelegate {
var webView: MyWKWebView!
override func loadView() {
super.loadView()
let webConfiguration = WKWebViewConfiguration()
webView = MyWKWebView(frame: CGRect(x: 0, y: 0, width: 300, height: 300), configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
var myURL: URL!
myURL = URL(string: "https://developer.apple.com/")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
webView.allowsMagnification = true
webView.magnification = 0.25
webView.setMagnification(0.25, centeredAt: CGPoint(x: 150, y: 150))
}
}
In addition, you should check the system Preferences > General.
Check that
Display sidebars
is not set to always.
For WebKit's WebView, use "webView.scrollView.isScrollEnabled = false" For the older UIWebView, use "webView.enclosingScrollView.hasVerticalScroller = false"