                 observesInteractiveScrollView = false
             }
             if let scrollView = interactiveScrollView {
-                scrollView.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
+                scrollView.addObserver(self, forKeyPath: "contentOffset", options: [.old, .new], context: nil)
                 observesInteractiveScrollView = true
             }
         }

            
            updateButtonPosition()
            
            superview.addObserver(self, forKeyPath: "frame", options: .new, context: nil)
            observesSuperviewBounds = true
            if (floating && superview is UIScrollView) {
                superview.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
                observesSuperviewContentOffset = true
            }
        }

    /* Observers */
    
    override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if let newValue = change?[.newKey] as? NSObject,
            let oldValue = change?[.oldKey] as? NSObject,
            newValue == oldValue {
            return
        }
        if (object as? UIView) == superview && keyPath == "frame" {
            guard let superview = self.superview else { return }
            
