当UITableView高度更改时更新其他元素的约束

时间:2016-01-13 05:51:40

标签: ios iphone swift uitableview

我有UITableView我在autolayout中将高度定义为200。基于此我在其下面列出了其他元素,如UITextField等。在运行时之后,我从服务器获取数据并填入UITableView,因为我正在更新UITableView& #39;高度取决于其内容大小。以下代码我正在使用它

self.myTableView.frame = CGRectMake(0 , 0, self.myTableView.frame.width, self.myTableView.contentSize.height)

但是由于这个原因,位于UITableView下面的所有元素仍然出现在他们在Autolayout中布局时的相同位置。意味着UITableView的高度变化对他们没有影响。下图描绘了这个问题。有什么可能解决这个问题?

enter image description here

在这里,您可以看到,文本字段在运行时在tableview上重叠。我在Xcode 7.2中使用Swift 2

3 个答案:

答案 0 :(得分:6)

如果您对表视图和其他视图都有所有必需的约束。

不要改变TableView的框架来改变它的高度。 而是创建Tablview的高度约束的IBOutlet。

e.g。说IBOutlet名称是constraintTableViewHeight, 那么你就可以轻松实现这一目标。

constraintTableViewHeight.constant = yourNewHeightValue
//update all constraint of your view and its inner view
self.view.layoutIfNeeded();

参考图像为您的身高约束创建IBOutlet。

enter image description here

答案 1 :(得分:1)

NSLayoutConstraint的IBOutlet用于tableView Height并设置其值而不设置tableview框架如果已经为tableview提供了约束,那么它将无法工作,因此更改tableview高度常量

就像你将tblHeight用于tableView高度一样,然后设置tblHeight.constant = self.myTableView.contentSize.height

答案 2 :(得分:0)

您必须为tableview高度约束创建出口连接。

@IBOutlet weak var heightContraint:NSLayoutConstraint!

当您想要更改表格视图高度时,您可以更改约束值,如下所示

heightContraint.constant = newHeightValue self.view.layoutIfNeeded();