Swift-在Xib中动态设置UITableView高度

时间:2018-07-12 06:57:51

标签: ios swift uitableview xib

我尝试在Xib中动态设置tableView的高度。但是所有元素在xib视图中都是动态变化的,而在tableview之前我没有到达最后一个元素的“ y”位置。

我尝试了类似的方法,但是没有用。它显示在mainView的顶部。

techTableView = mainView?.technicalTableView

self.techTableView?.frame = CGRect(
    x: 0,
    y: (self.techTableView?.topAnchor.constraint(equalTo: (mainView?.productInformation.bottomAnchor)!, constant: 25).constant)! ,
    width: self.view.frame.size.width,
    height: 35)

2 个答案:

答案 0 :(得分:2)

使用布局锚来设置约束,而不是设置框架。您可以执行以下操作来设置表格视图的约束:

techTableView.translatesAutoresizingMaskIntoConstraints = false

    techTableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
    techTableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
    techTableView.topAnchor.constraint(equalTo: mainView.bottomAnchor).isActive = true
    techTableView.heightAnchor.constraint(equalToConstant: 35).isActive = true

答案 1 :(得分:1)

您的代码似乎令人困惑,您正在尝试使用锚点来设置表格视图框架,但这并不是它的工作方式。如果您打算通过设置约束来做到这一点,那么无论表格框架的大小如何,都应该在添加表格视图之后进行。

因此,在确保将techTableView添加到其超级视图(例如:view.addSubview(tableView))之后,您需要实现以下内容:

tableView.translatesAutoresizingMaskIntoConstraints = false

// x axis:
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0.0).isActive = true
// y axis:
tableView.topAnchor.constraint(equalTo: mainView?.productInformation.bottomAnchor, constant: 25.0).isActive = true
// width:
tableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
// height:
tableView.heightAnchor.constraint(equalToConstant: 35.0).isActive = true

此时,它应该按预期显示,它已经受约束处理,而无需编辑框架(默认为CGRect.zero)。