У меня есть подкласс UIView
, который также содержит UIScrollView
. Я хочу, чтобы этот scrollview отображал fla sh scrollIndicators, когда scrollView можно прокручивать. Это зависит от набора признаков (компактные признаки имеют меньше места, поэтому scrollView становится прокручиваемым).
Чтобы добиться этого, я сделал следующее
class TestView: UIView {
override func layoutSubviews() {
super.layoutSubviews()
// This means the scrollView is scrollable.
if scrollView.contentSize.height > scrollView.bounds.height {
scrollView.flashScrollIndicators()
}
}
}
Проблема в том, что layoutSubviews()
называется несколько раз. В первый раз может случиться так, что contentSize
не обновится, что приведет к запуску анимации fla sh, так как она прошла условие. Во второй раз, когда вызывается layoutSubviews
, он, наконец, имеет обновленный contentSize, не соответствует условию и не будет показывать sh индикаторов. Проблема в том, что при первом вызове он уже вызывал анимацию, и теперь он виден пользователю.
Я уже пытался вызвать invalidateIntrinsicContentSize()
для себя, а также для scrollView
. Я также пытался вызвать scrollView.setNeedsLayout()
и scrollView.layoutIfNeeded()
, прежде чем выполнить это условие, но безуспешно.
Должен ли я выполнить эту проверку в другом месте? Я уже пробовал это в viewDidlayoutSubviews
методе UIViewController
, содержащем это TestView
. Или есть какой-то другой API, который мне нужно вызвать перед выполнением проверки?