我正在尝试使用UITableView
列出用户可用的所有不同HomeKit设备。
显然,没有办法知道他们有多少设备,所以我需要在故事板中更改UITableView's
高度。
我试过这个,我在viewDidLoad()
函数中调用:
func adjustHeightOfTableView() {
//getting the height of the tableview
var tableHeight = self.tableView.contentSize.height
//the height of the content inside the view
var maxHeight = self.tableView.superview?.frame.size.height
//if the height of the content is bigger then the height of the tableview
if (maxHeight! > tableHeight) {
tableHeight = maxHeight!
//set the tableview height to be the content height
}
//trying to reload the tableview height?
self.view.layoutIfNeeded()
self.tableView.reloadData()
}
我试图在tableview下面有一些UI元素,我希望它们是tableview底部的一个空间,但是tableview也是它需要的高度,对于任何数量的单元格有。。
但它只是不起作用。 如果我做错了什么,或者有人知道如何做这项工作,请告诉我。 谢谢!
答案 0 :(得分:2)
注意:对于这种方法,您需要具有静态单元格高度或找出一种方法来了解总内容高度
假设您正在使用约束,请在UITableView
上创建以下约束(除了前导和尾随!)
向您的超级视图添加优先级为750且底部间距约束为0的高度约束,该超级视图将为>=
0且优先级为1000.为您在此处创建的此高度约束创建出口UIViewController
现在,
func adjustHeightOfTableView() {
//set the height to be equal to the number of elements multiplied by the height of each cell.
//or use some logic that allows you to know what content size or space the cells will occupy!
tableViewHeightConstraint.constant = dataArray.count * rowHeight
view.layoutIfNeeded()
}
现在,如果你的UITableView
身高低于超级视野,那么没问题!但是如果它大于屏幕边界,它将打破高度约束并变为全屏并正常显示内容,正如您期望UITableView
一样!
修改强>:
即使您使用的是UIAutomaticRowDimensions
,您可以通过编程方式向UITableView
添加约束。即
当然,您的所有其他观点仍然会对您的UITableView
产生最低限制。
在故事板中创建UITableView
,在超级视图中使用正常的前导,尾随,顶部和底部。获取数据。获取UITableView
的contentSize,然后删除底部约束。现在添加一个高度约束,该约束将是UIScreen.main().bounds.size.height
和contentSize
的最小值。
答案 1 :(得分:1)
如果您使用自动布局
,则可以使用自动尺寸在视图中执行:
let nib = UINib(nibName: "YOURCELLNIB", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "REUSEIDENTIFIER")
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
删除功能
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath)
答案 2 :(得分:0)
在您的代码中,您有:
tableHeight = maxHeight!
//set the tableview height to be the content height
但这不会改变表高度 - 它只会更改以前分配了旧表内容高度值的某个变量。你的代码中没有任何地方可以做任何改变表高度的事情。
直接更改表格高度的一种方法是为其指定一个全新的框架,其中包含旧框架的值,但框架的高度除外,您可以根据自己的喜好计算它。
尝试这样的事情(添加你需要的其他逻辑):
oldFrame = self.tableView.frame
newHeight = rowCount * rowHeight
self.tableView.frame = CGRectMake(oldFrame.origin.x, oldFrame.origin.y, oldFrame.size.width, newHeight)
答案 3 :(得分:0)
有一种解决方法可以使高度看起来像根据细胞数量而变化。
在init时将tableview height设置为适当的值。
UITableView.init(frame: CGRect.init(x: 0, y: 70, width: self.view.frame.width, height: self.view.frame.height - 350))
将tableview背景颜色设置为白色透明。
pulldownTableView?.backgroundColor = UIColor.white.withAlphaComponent(0)
设置tableFooterView。
pulldownTableView?.tableFooterView = UIView(frame: CGRect.zero)
下面是结果,img中有两个表。我为前面的tableview设置透明,左边img将backgroundColor设置为白色,右边白色透明。