Ios 静态表格视图单元格调整高度、填充视图高度
我的应用程序需要一些uitableview可以简化的事情。但我遇到了这个问题:我希望底部单元格始终位于视图控制器的底部,并且我希望所有单元格动态调整其高度,使每个单元格都位于视图控制器内,无需滚动即可看到更多单元格Ios 静态表格视图单元格调整高度、填充视图高度,ios,objective-c,uitableview,swift,Ios,Objective C,Uitableview,Swift,我的应用程序需要一些uitableview可以简化的事情。但我遇到了这个问题:我希望底部单元格始终位于视图控制器的底部,并且我希望所有单元格动态调整其高度,使每个单元格都位于视图控制器内,无需滚动即可看到更多单元格 基本上,我想要3或4个大的TableViewCell,它们都会根据所使用的设备动态地改变高度。警告:所有这些细胞都需要有不同的高度。有什么想法吗?您可以重写UITableViewDelegate方法,并基于indepath - (CGFloat)tableView:(UI
基本上,我想要3或4个大的TableViewCell,它们都会根据所使用的设备动态地改变高度。警告:所有这些细胞都需要有不同的高度。有什么想法吗?您可以重写
UITableViewDelegate
方法,并基于indepath
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
在这个委托方法中,只需返回UITableView的高度除以UITableView中的行数即可
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
return tableView.frame.size.height / tableView.numberOfRowsInSection(0)
}
(0)假定表视图中只有一个节 扩展@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
}
最后,由于不希望表格滚动,因此在配置表格视图时需要添加tableView.scrollEnabled=false
。如果你使用故事板,可能是IB
最终结果是:
我会使用-tableView:heightForRowAtIndexPath:和view.frame.size.height来计算每个单元格的高度。您确实可以为您的单元格设置动态高度。您可以始终使用%逻辑来计算高度。例如,cell1 25%的视图cell2 50%的cell3 10%和cell4 15%的框架高度,但根据设备的不同而有所不同,除非您期望3到4个单元中的每个单元都具有潜在的独特高度。非常棒的深度解释。感谢您的帮助,我刚刚更新了我的答案,添加了
absoluteCellHeights
可能只包含零的事件。但是干杯!我很高兴能帮上忙。极好的解释和回答。谢谢
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
}