Как получить доступ к позиции полосы прокрутки в Swift - PullRequest
2 голосов
/ 07 ноября 2019

Я пытаюсь получить доступ к положению полосы прокрутки в scrollview, чтобы я мог прикрепить к ней некоторые элементы пользовательского интерфейса. Единственный метод, который я нашел для доступа к этому, это scrollViewDidScroll(_ scrollView:).

. Это дает мне свойство scrollView.contentOffset.y, но я не могу использовать его во время выполнения, чтобы присоединить к нему свой пользовательский интерфейс. Я думаю, что это дает мне всю длину прокрутки, а не положение полосы прокрутки.

Я пытаюсь сделать именно то, что обведено красным на этом скриншоте. (Сообщение KakaoTalk)

enter image description here

1 Ответ

0 голосов
/ 08 ноября 2019

Самый простой способ найти относительную позицию позиции scrollBar - найти ее текущий процент в scrollView и использовать это значение для определения процента, в котором scrollBar находится в пределах границ.

Позиция ScrollView: (scrollView.contentOffset.y / scrollView.contentSize.height)

Что в основном Current Scrolling Position / Total Height of ScrollView

Давайте назовем это scrollPercent.

let scrollPercent = (scrollView.contentOffset.y / scrollView.contentSize.height)

Это даст вам% значение от 0 до 1 (0% и 100%).

Вы можете взять scrollPercent и умножить его на максимальную высоту родительского вида view.bounds.size.height, чтобы получить приблизительное значение Y полосы прокрутки в представлении.

let scrollBarPosition = scrollPercent * (view.bounds.size.height)

Это можно использовать как значение Y для вашего элемента пользовательского интерфейса.

Когда вы делаете это, убедитесь, что scrollView.contentSize.height равно> 0, потому что оно начинается с нуля, и если вы попытаетесь разделить на это, число достигнет бесконечности, и ваше приложение упадет.

Окончательное решение выглядит следующим образом:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    let scrollBarPosition: CGFloat = (scrollView.contentOffset.y / scrollView.contentSize.height) * (view.bounds.size.height)

    if scrollView.contentSize.height > 0 {
        dateScrollbar.snp.remakeConstraints { (make) in
            make.centerY.equalTo(scrollBarPosition)
            make.trailing.equalToSuperview().inset(110)
        }

    }
}

Примечание. Я использую библиотеку автоматического размещения, называемую SnapKit, для установки ограничений автоматического размещения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...