我有下一个视图结构:
vc
-view
--safe area
--scrollview
---view
----containerview1
----containerview2
----containerview3
-----tableviewcontroller(in containervew3)
Tableviewcontroller有添加或删除行的按钮,我想调整滚动视图的大小,它显示完整的tableview内容(不在tableview中滚动)。我尝试解决方案:来自here或Sizing a Container View with a controller of dynamic size inside a scrollview,但没有成功。我使用的是iOS 10.0和swift
首先是约束。你必须对UIScrollView
和容器的视图有适当的约束
接下来你需要的是tableviewController
的高度限制(你可以将高度设置为0,关系大于等于750优先级,因此如果发生错误,约束永远不会破坏)
当您的数据插入/删除发生时,您的内容大小将更改,并将该内容高度应用于IBOutlet约束的常量,并且不要忘记layoutIfNeeded,请获取该高度约束的IBOutlet。
使您的tableview滚动反弹为false
创建protocol
以通知容器视图有关高度变化的信息
protocol ContainerTableDelegate {
func dataChanged(height: CGFloat)
}
当高度变化通知父视图控制器时
delegate?.dataChanged(self.heightConstraint.constant)
现在在主视图控制器中,您拥有所有容器
实行
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
识别ViewController设置委托给self
实现委托并更改容器视图3的高度常量(你还需要这个)
希望它有助于解决您的问题