【发布时间】:2021-10-07 12:34:05
【问题描述】:
所以我有一个scrollView,其中scrollView 是一个stackView,它包含屏幕中的每个views。
问题是我的stackView 有很多可隐藏的views 所以我需要根据我的stackView's height 调整我的containsVieww's height
我的伪代码应该是这样的:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print(stackView.bounds.height)
// do logic to change contentView size here
}
func setupView(){
scrollView.topAnchor.constraint(equalTo: guide.topAnchor).isActive = true
scrollView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
scrollView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
scrollView.backgroundColor = .white
scrollView.contentSize = CGSize(width: view.frame.width, height: view.frame.height)
scrollView.addSubview(stackView)
stackView.setArrangedSubView(views: [label1, label 2, label 3, label 4, ..., label n]
[label1, label 2, label 3].isHidden = true
}
func onHitButton(){
if isHidden {
[label1, label 2, label 3].isHidden = false
isHidden = false
} else {
[label1, label 2, label 3].isHidden = true
isHidden = true
}
print(stackView.bounds.height) // still return the ex height
}
问题来了:
第一个init,我的[label1,2,3].isHidden = true,我的stackViewHeight是500
当我的onHitButton 被调用时,我的[label1,2,3].isHidden = false,我的stackViewHeight 仍然是500,但屏幕显示正确,那些labels 现在可见,我的stackView 被拉伸。当然我的scrollView 显示不正确。
然后我再次点击我的onHitButton,那些labels 被隐藏,我的stackView 在屏幕上缩小但stackViewHeight 返回850?
应该是相反的。
我还尝试在另一个button 呼叫中print height 并返回正确的height?好像viewDidLayoutSubviews 调用得太早了。
总结一下:stackView 在它自己调整大小之前返回高度
【问题讨论】:
标签: swift uistackview viewdidlayoutsubviews