Files
Attractor/SBrowser/Browser View/BrowserView.swift

84 lines
2.8 KiB
Swift
Raw Normal View History

//
// BrowserView.swift
// SBrowser
//
// Created by James Magahern on 7/21/20.
//
2020-07-24 19:26:35 -07:00
import Combine
import UIKit
import WebKit
class BrowserView: UIView
{
2020-07-29 14:16:25 -07:00
let titlebarView = TitlebarView()
2020-07-24 19:26:35 -07:00
var toolbarView: ToolbarView? {
didSet { addSubview(toolbarView!) }
}
var webView: WKWebView? {
2020-07-24 19:26:35 -07:00
didSet {
if let toolbarView = toolbarView {
insertSubview(webView!, belowSubview: toolbarView)
} else {
addSubview(webView!)
}
}
}
2020-07-24 19:26:35 -07:00
var keyboardWillShowObserver: AnyCancellable?
var keyboardWillHideObserver: AnyCancellable?
var keyboardLayoutOffset: CGFloat = 0 { didSet { setNeedsLayout() } }
convenience init() {
self.init(frame: .zero)
2020-07-29 14:16:25 -07:00
addSubview(titlebarView)
2020-07-24 19:26:35 -07:00
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
}
}
2020-07-24 19:26:35 -07:00
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
2020-07-24 19:26:35 -07:00
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)
}
2020-07-29 14:16:25 -07:00
bringSubviewToFront(titlebarView)
var titlebarHeight: CGFloat = 24.0
titlebarHeight += safeAreaInsets.top
titlebarView.frame = CGRect(origin: .zero, size: CGSize(width: bounds.width, height: titlebarHeight))
// Fix web view content insets
webView?.scrollView.automaticallyAdjustsScrollIndicatorInsets = false
var webViewContentInset = UIEdgeInsets()
webViewContentInset.top = titlebarView.frame.height
webViewContentInset.bottom = toolbarView?.frame.height ?? 0
webView?.scrollView.contentInset = webViewContentInset
webView?.scrollView.scrollIndicatorInsets = webViewContentInset
}
}