             make.right.equalTo(self).offset(-buttonRightMargin)
             make.top.equalTo(self).offset(buttonTopBottomMargin + contentView.contentInsets.top)
         }
-        addBoundsDidChangeNotificationObserver()
     }
 
-    func enableBottomScrollButton(width: Int? = defaultButtonWidth) {
+    func addBottomScrollButton(width: Int? = defaultButtonWidth) {
         guard downButton.superview == nil else { return }
 
         configureButtonAppearance(downButton, image: Asset.arrowDownwardBlack.image)
         downButton.toolTip = L10n.scrollDownButton
         downButton.onPressed = { [weak self] in self?.scrollDown() }
         downButton.onLongPressed = { [weak self] in self?.scrollToBottom() }
-        updateBottomButtonVisibility()
 
         superview?.addSubview(downButton)
         downButton.snp.makeConstraints { make in


    @objc func contentViewDidChangeBounds(_ notification: Notification) {
        updateButtonVisibilities()
    }

    func updateTopButtonVisibility() {
        upButton.isHidden = isReachedToTop
    }

    func updateBottomButtonVisibility() {
        downButton.isHidden = isReachedToBottom
    }
}


// MARK: - Public Functions
extension ButtonScrollView {
    func enableScrollButtons() {
        addTopScrollButton()
        addBottomScrollButton()
        updateButtonVisibilities()
        addBoundsDidChangeNotificationObserver()
    }

    func updateButtonVisibilities() {
        upButton.isHidden = isReachedToTop
        downButton.isHidden = isReachedToBottom
    }
}

private extension ButtonScrollView {
    func addTopScrollButton(width: Int? = defaultButtonWidth) {
        guard upButton.superview == nil else { return }

        configureButtonAppearance(upButton, image: Asset.arrowUpwardBlack.image)
        upButton.toolTip = L10n.scrollUpButton
        upButton.onPressed = { [weak self] in self?.scrollUp() }
        upButton.onLongPressed = { [weak self] in self?.scrollToTop() }

        // Make sure we need to call `addSubview()` of `superview`, not of `self`.
        // Seems `self` and its descendants are not controlled by auto layout,
