diff --git a/Client/Frontend/Browser/BrowserViewController.swift b/Client/Frontend/Browser/BrowserViewController.swift index 29d1b4a95..0eec6eaf8 100644 --- a/Client/Frontend/Browser/BrowserViewController.swift +++ b/Client/Frontend/Browser/BrowserViewController.swift @@ -667,8 +667,8 @@ class BrowserViewController: UIViewController { webViewContainerTopOffset = make.top.equalTo(readerModeBar?.snp.bottom ?? self.header.snp.bottom).constraint let findInPageHeight = (findInPageBar == nil) ? 0 : UIConstants.ToolbarHeight - if let toolbar = self.toolbar { - make.bottom.equalTo(toolbar.snp.top).offset(-findInPageHeight) + if let footerView = self.footer { + make.bottom.equalTo(footerView.snp.top).offset(-findInPageHeight) } else { make.bottom.equalTo(self.view).offset(-findInPageHeight) } @@ -694,7 +694,7 @@ class BrowserViewController: UIViewController { make.left.right.equalTo(self.view) if self.homePanelIsInline { - make.bottom.equalTo(self.toolbar?.snp.top ?? self.view.snp.bottom) + make.bottom.equalTo(self.footer?.snp.top ?? self.view.snp.bottom) } else { make.bottom.equalTo(self.view.snp.bottom) } @@ -705,8 +705,8 @@ class BrowserViewController: UIViewController { make.width.equalTo(self.view.snp.width) if let keyboardHeight = keyboardState?.intersectionHeightForView(self.view), keyboardHeight > 0 { make.bottom.equalTo(self.view).offset(-keyboardHeight) - } else if let toolbar = self.toolbar { - make.bottom.equalTo(toolbar.snp.top) + } else if let footer = self.footer { + make.bottom.equalTo(footer.snp.top) } else { make.bottom.equalTo(self.view) } diff --git a/Client/Frontend/Browser/Tab.swift b/Client/Frontend/Browser/Tab.swift index 059799484..e168507f6 100644 --- a/Client/Frontend/Browser/Tab.swift +++ b/Client/Frontend/Browser/Tab.swift @@ -189,6 +189,8 @@ class Tab: NSObject { configuration!.preferences = WKPreferences() configuration!.preferences.javaScriptCanOpenWindowsAutomatically = false configuration!.allowsInlineMediaPlayback = true + // Enables Zoom in website by ignoring their javascript based viewport Scale limits. + configuration!.ignoresViewportScaleLimits = true let webView = TabWebView(frame: .zero, configuration: configuration!) webView.delegate = self configuration = nil diff --git a/Client/Frontend/Browser/TabScrollController.swift b/Client/Frontend/Browser/TabScrollController.swift index 0d7ed300c..81be4d1d6 100644 --- a/Client/Frontend/Browser/TabScrollController.swift +++ b/Client/Frontend/Browser/TabScrollController.swift @@ -22,11 +22,11 @@ class TabScrollingController: NSObject { weak var tab: Tab? { willSet { self.scrollView?.delegate = nil - self.scrollView?.removeGestureRecognizer(panGesture) + self.scrollView?.panGestureRecognizer.removeTarget(self, action: nil) } didSet { - self.scrollView?.addGestureRecognizer(panGesture) + self.scrollView?.panGestureRecognizer.addTarget(self, action: #selector(handlePan)) scrollView?.delegate = self } } @@ -52,7 +52,7 @@ class TabScrollingController: NSObject { fileprivate var headerTopOffset: CGFloat = 0 { didSet { - headerTopConstraint?.update(offset: headerTopOffset - tabsBarOffset) + headerTopConstraint?.update(offset: headerTopOffset) header?.superview?.setNeedsLayout() } } @@ -70,13 +70,6 @@ class TabScrollingController: NSObject { } } - fileprivate lazy var panGesture: UIPanGestureRecognizer = { - let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan)) - panGesture.maximumNumberOfTouches = 1 - panGesture.delegate = self - return panGesture - }() - fileprivate var scrollView: UIScrollView? { return tab?.webView?.scrollView } fileprivate var contentOffset: CGPoint { return scrollView?.contentOffset ?? .zero } fileprivate var contentSize: CGSize { return scrollView?.contentSize ?? .zero } @@ -259,19 +252,19 @@ private extension TabScrollingController { // produce a ~50px page jumping effect in response to tap navigations. let isShownFromHidden = headerTopOffset == -topScrollHeight && headerOffset == 0 + if isShownFromHidden { + scrollView.contentOffset = CGPoint(x: initialContentOffset.x, y: initialContentOffset.y + self.topScrollHeight) + } + self.headerTopOffset = headerOffset + self.footerBottomOffset = footerOffset + self.urlBar?.updateAlphaForSubviews(alpha) + self.tabsBar?.view.alpha = alpha let animation: () -> Void = { - if isShownFromHidden { - scrollView.contentOffset = CGPoint(x: initialContentOffset.x, y: initialContentOffset.y + self.topScrollHeight) - } - self.headerTopOffset = headerOffset + self.tabsBarOffset - self.footerBottomOffset = footerOffset - self.urlBar?.updateAlphaForSubviews(alpha) - self.tabsBar?.view.alpha = alpha self.header?.superview?.layoutIfNeeded() } if animated { - UIView.animate(withDuration: duration, delay: 0, options: .allowUserInteraction, animations: animation, completion: completion) + UIView.animate(withDuration: duration, delay: 0, options: [.beginFromCurrentState, .allowUserInteraction], animations: animation, completion: completion) } else { animation() completion?(true)