Установка нижней вставки индикатора прокрутки в представлении UIScrollView неожиданно влияет на положение горизонтальной полосы прокрутки - PullRequest
0 голосов
/ 07 июля 2019

UIScrollView позволяет нам установить scrollIndicatorInset. Однако при установке нижней вставки для этого значения на iPhone с альбомной ориентацией с safeAreaInset (то есть «надрезом») горизонтальное положение полосы прокрутки неожиданно обновляется.

Вот представление прокрутки на iPhone X без изменений на scrollIndicatorInset - обратите внимание, что полоса прокрутки на правом краю расположена горизонтально на одном уровне с краем экрана.

image

Now I add one line of code:

scrollView.scrollIndicatorInsets.bottom = 1

The bottom edge of the scroll indicator is inset as expected. But the scrollbar is now also relocated horizontally to align with the safe area, rather than the screen edge.

image

В чем причина этой горизонтальной вставки и как я могу ее предотвратить?

Установка нижнего отступа прокрутки в любое значение, кроме 0, добавляет дополнительное поле, а установка обратно в 0 удаляет его. То же самое применимо при установке любого из краев вставок прокрутки.

Некоторые записи до и после установки scrollIndicatorInset не показывают изменений safeAreaInset и layoutMargins в представлении, представлении с прокруткой или представлении содержимого в представлении с прокруткой.

Единственное, с чем это связано, - это при размещении текстового поля в виде прокрутки и настройке нижней вставки для размещения клавиатуры. Полоса прокрутки перемещается по мере появления и отклонения клавиатуры.

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

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let scrollView = UIScrollView()
        scrollView.backgroundColor = .white
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(scrollView)
        scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

        let contentView = UIView()
        contentView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(contentView)
        contentView.leftAnchor.constraint(equalTo: scrollView.leftAnchor).isActive = true
        contentView.rightAnchor.constraint(equalTo: scrollView.rightAnchor).isActive = true
        contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
        contentView.widthAnchor.constraint(equalToConstant: 50).isActive = true
        contentView.heightAnchor.constraint(equalToConstant: 500).isActive = true

        // this causes the issue
        scrollView.scrollIndicatorInsets.bottom = 1
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...