Индикатор прокрутки UITableView с неожиданным заполнением сверху - PullRequest
1 голос
/ 17 апреля 2020

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

NSLayoutConstraint.activate([
    tableView.topAnchor.constraint(equalTo: customHeader.bottomAnchor),
    tableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
    tableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
    tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])

Итак, я заметил странное поведение индикатора прокрутки:

enter image description here

зеленый - customHeader, синий - это цвет фона tableView, а оранжевый - первая ячейка. Когда я опускаю табличное представление и достигаю первой ячейки, индикатор прокрутки находится не в нулевом положении, а только графически. На самом деле tableView.scrollIndicatorInsets.top - это ноль.

Поэтому я попытался установить его, например, на -20, и индикатор прокрутки имеет ноль позади customHeader, как и ожидалось. Таким образом, он начинает появляться за пределами tableView.

Я попытался установить tableView.scrollIndicatorInsets.top = .leastNonZeroMagnitude, и это работает. Теперь индикатор начинается с нуля.

Я изучил это поведение и обнаружил, что если изменить нижнее ограничение с:

tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)

на:

tableView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor)

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

Любой совет по этому поводу? Я думаю, что это ошибка. Я работаю с Xcode 11.4 и Swift 5.2.

Спасибо.

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