         }
 
         func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
-            if autoHidden == true && decelerate == false && hiddenTimer == nil {
-                timer(hiddenTimeInterval)
+            let isScrollToOrigin: Bool = {
+                switch position {
+                case .top:
+                    return contentOffsetY < topInset + safeAreaInsets.top - contentHeight * 0.75
+                case .bottom:
+                    return contentOffsetY > contentHeight * 0.75 - bottomInset - safeAreaInsets.bottom
+                }
+            }()
+
+            if isScrollToOrigin {
+                if autoHidden == true && decelerate == false {
+                    scrollToOrigin {
+                        if self.hiddenTimer == nil {
+                            self.timer(self.hiddenTimeInterval)
+                        }
+                    }
+                }
+            } else {
+                scrollToRemove()
+            }
+        }
+
+        func scrollToOrigin(completion: @escaping () -> Void) {
+            showContent({
+                switch self.position {
+                case .top:
+                    self.contentOffsetY = -self.contentHeight
+                case .bottom:
+                    self.contentOffsetY = self.contentHeight
+                }
+                self.setNeedsStatusBarAppearanceUpdateIfNeeded()
+            }) { _ in
+                completion()
+            }
+        }
+
+        func scrollToRemove() {
+            hideContent({
+                switch self.position {
+                case .top:
+                    self.contentOffsetY = self.safeAreaInsets.top + self.topInset
+                case .bottom:
+                    self.contentOffsetY = -(self.safeAreaInsets.bottom + self.bottomInset)
+                }
+                self.setNeedsStatusBarAppearanceUpdateIfNeeded()
+            }) { _ in
+                self.removeContent()
+                self.hideCompletionHandler?()
             }
         }
 


            noticeView.clipsToBounds = false
            noticeView.showsVerticalScrollIndicator = false
            noticeView.isPagingEnabled = true
            noticeView.bounces = false
            noticeView.delegate = self
            switch position {

            autoHidden = false

            if animated == true {
                scrollToRemove()
            } else {
                self.setNeedsStatusBarAppearanceUpdateIfNeeded()
                removeContent()
