我的应用程序需要一些UITableViews做得更简单的事情。我遇到了这个问题:我希望底部单元始终位于视图控制器的底部,我希望所有单元格动态调整它们的高度,以便每个单元格都适合视图控制器内部,不需要滚动看到更多细胞。
基本上我想要3或4个大的tableViewCell,它们都根据正在使用的设备动态改变高度。警告:所有这些细胞需要不同的高度。有什么想法吗?
答案 0 :(得分:2)
扩展@Vig的评论:
您没有指定如何确定单元格高度,因此我假设它们未在0和1之间进行标准化。
因此,在UITableViewController
中,您需要以下变量:
对于我的示例,我使用absoluteCellHeights
作为确定单元格高度的数据,这需要根据您的目的进行更改。
var absoluteCellHeights: [CGFloat] = [50, 40, 20, 10] {
didSet {
tableView.reloadData()
}
}
normalisedCellHeights
获取absoluteCellHeights
并将它们缩放到0到1的区间内。但是,如果absoluteCellHeights
只是满了零,则会返回nil。
var normalisedCellHeights: [CGFloat]? {
let totalHeight = absoluteCellHeights.reduce(0, combine: +)
let normalisedHeights: [CGFloat]? = totalHeight <= 0 ? nil : absoluteCellHeights.map { $0 / totalHeight }
return normalisedHeights
}
现在在heightForRowAtIndexPath
你可以这样做:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
// Swift 1.2, which is why I'm using 'let' here.
let height: CGFloat
// It is assumed there is only one section.
if let normalisedHeight = self.normalisedCellHeights?[indexPath.row] {
height = normalisedHeight * tableView.frame.height
} else {
height = 50.0 // Just a random value.
}
return height
}
最后,因为您不希望表格滚动,所以在配置表格视图时需要添加tableView.scrollEnabled = false
。如果您正在使用故事板,可能是IB?
最终结果:
答案 1 :(得分:0)
您可以覆盖UITableViewDelegate
方法,并根据indexPath
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
答案 2 :(得分:0)
在这个委托方法中,只需返回UITableView的高度除以UITableView中的行数。
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
return tableView.frame.size.height / tableView.numberOfRowsInSection(0)
}
(0)假设您的表视图中只有一个部分。