Files
Attractor/SBrowser/Browser View/BrowserView.swift

64 lines
2.0 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-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)
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)
}
}
}