UIScrollView
позволяет нам установить scrollIndicatorInset
. Однако при установке нижней вставки для этого значения на iPhone с альбомной ориентацией с safeAreaInset
(то есть «надрезом») горизонтальное положение полосы прокрутки неожиданно обновляется.
Вот представление прокрутки на iPhone X без изменений на scrollIndicatorInset
- обратите внимание, что полоса прокрутки на правом краю расположена горизонтально на одном уровне с краем экрана.
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.
В чем причина этой горизонтальной вставки и как я могу ее предотвратить?
Установка нижнего отступа прокрутки в любое значение, кроме 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
}
}