Как получить пользовательскую высоту scrollingStackView - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть пользовательское представление, это прокручиваемое представление со стековым представлением в нем. И я добавил 3 вида контейнера внутри этого стека, чтобы складывать и прокручивать вертикально. В каждом представлении контейнера я добавляю либо UIImage, либо представление UILabel.

Я не хочу, чтобы мое представление прокрутки прокручивалось, если все представления уже видны на экране. Для этого мне нужно знать высоту моего scrollingStackView, чтобы я мог сравнить его с текущим размером экрана. Вот как я настроил их в viewDidLoad:

setupScrollingSV()

setupContainer1()
setupContainer2()
setupContainer3()

setupImageViewInContainer1()
setupImageViewInContainer2()
setupLabelViewInContainer3()

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

scrollingSV.leftAnchor.constraint(equalTo: stackView.leftAnchor).isActive = true
scrollingSV.rightAnchor.constraint(equalTo: stackView.rightAnchor).isActive = true
scrollingSV.topAnchor.constraint(equalTo: stackView.topAnchor).isActive = true

И есть другое представление стека, которое находится в безопасной области моего представления, которое имеет это представление стека прокрутки и другое представление контейнера ContainerView4.

Я размещаю ContainerView4 следующим образом:

ContainerView4.leftAnchor.constraint(equalTo: stackView.leftAnchor).isActive = true
ContainerView4.rightAnchor.constraint(equalTo: stackView.rightAnchor).isActive = true
ContainerView4.topAnchor.constraint(equalTo: scrollingSV.bottomAnchor).isActive = true
ContainerView4.bottomAnchor.constraint(equalTo: stackView.bottomAnchor).isActive = true
ContainerView4.heightAnchor.constraint(equalToConstant: 100.0).isActive = true

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

enter image description here

enter image description here

Вот код, который я пытаюсь получить размер для scrollingSV, который возвращает 0:

print("Scrollview height: \(scrollingSV.contentSize.height )")

Я уже пытался чтобы получить размер контента, используя union, как сказано в этом ответе stackoverflow: Как автоматически настроить UIScrollView для соответствия его содержимому Но это также возвращает 0.

Как получить эту прокрутку размер стека? Или это еще не рассчитано в viewDidLoad?

Спасибо

1 Ответ

0 голосов
/ 28 апреля 2020

Видимо, в viewDidLoad представления не были закончены с размещением их подпредставлений. Таким образом, высота еще не была значимой.

Когда я сделал эту проверку в viewDidAppear, проблема была устранена, и я смог добраться до вида contentSize и высоты кадра прокрутки стека.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    scrollingSV.isScrollEnabled = scrollingSV.contentSize.height > scrollingSV.frame.height
  }
...