如何获得自定义scrollingStackView的高度

问题描述 投票:0回答:1

我有一个自定义视图,它是一个滚动视图,其中有一个堆栈视图。我在此堆栈视图中添加了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 )")

我已经尝试过使用该联合体来获取内容大小,如以下stackoverflow答案中所述:How do I auto size a UIScrollView to fit its content但这也会返回0。

如何获得此滚动堆栈视图的大小?还是在viewDidLoad中尚未计算?

谢谢

swift uiscrollview size frame uistackview
1个回答
0
投票

显然,在viewDidLoad中,视图尚未完成其子视图的布局。所以这个高度还没有意义。

当我在viewDidAppear中进行此检查时,问题已解决,并且我可以达到滚动堆栈视图的contentSize和帧高度。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    scrollingSV.isScrollEnabled = scrollingSV.contentSize.height > scrollingSV.frame.height
  }
© www.soinside.com 2019 - 2024. All rights reserved.