64 lines
2.0 KiB
Swift
64 lines
2.0 KiB
Swift
//
|
|
// BrowserView.swift
|
|
// SBrowser
|
|
//
|
|
// Created by James Magahern on 7/21/20.
|
|
//
|
|
|
|
import Combine
|
|
import UIKit
|
|
import WebKit
|
|
|
|
class BrowserView: UIView
|
|
{
|
|
var toolbarView: ToolbarView? {
|
|
didSet { addSubview(toolbarView!) }
|
|
}
|
|
|
|
var webView: WKWebView? {
|
|
didSet {
|
|
if let toolbarView = toolbarView {
|
|
insertSubview(webView!, belowSubview: toolbarView)
|
|
} else {
|
|
addSubview(webView!)
|
|
}
|
|
}
|
|
}
|
|
|
|
var keyboardWillShowObserver: AnyCancellable?
|
|
var keyboardWillHideObserver: AnyCancellable?
|
|
var keyboardLayoutOffset: CGFloat = 0 { didSet { setNeedsLayout() } }
|
|
|
|
convenience init() {
|
|
self.init(frame: .zero)
|
|
|
|
keyboardWillShowObserver = NotificationCenter.default.publisher(for: UIWindow.keyboardWillShowNotification).sink { notification in
|
|
if let keyboardFrame = notification.userInfo?[UIWindow.keyboardFrameEndUserInfoKey] as? CGRect {
|
|
self.keyboardLayoutOffset = self.bounds.height - keyboardFrame.minY
|
|
}
|
|
}
|
|
|
|
keyboardWillHideObserver = NotificationCenter.default.publisher(for: UIWindow.keyboardWillHideNotification).sink { notification in
|
|
if let keyboardFrame = notification.userInfo?[UIWindow.keyboardFrameEndUserInfoKey] as? CGRect {
|
|
self.keyboardLayoutOffset = self.bounds.height - keyboardFrame.minY
|
|
}
|
|
}
|
|
}
|
|
|
|
override func layoutSubviews()
|
|
{
|
|
super.layoutSubviews()
|
|
webView?.frame = bounds
|
|
|
|
if let toolbarView = toolbarView {
|
|
var toolbarSize = toolbarView.sizeThatFits(bounds.size)
|
|
if keyboardLayoutOffset == 0 {
|
|
toolbarSize.height += safeAreaInsets.bottom
|
|
}
|
|
|
|
toolbarView.bounds = CGRect(origin: .zero, size: toolbarSize)
|
|
toolbarView.center = CGPoint(x: bounds.center.x, y: bounds.maxY - (toolbarView.bounds.height / 2) - keyboardLayoutOffset)
|
|
}
|
|
}
|
|
}
|