我正尝试使用以下代码将tableView
中每行的高度设置为相应单元格的高度:
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var cell = tableView.cellForRowAtIndexPath(indexPath)
return cell.frame.height
}
初始化var cell
时出现此错误:
线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x306d2c)
答案 0 :(得分:120)
设置行高有单独的方法:
Swift 3
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return 100.0;//Choose your custom row height
}
较旧的 Swift 使用
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
return 100.0;//Choose your custom row height
}
否则您可以使用以下方式设置行高:
self.tableView.rowHeight = 44.0
在 ViewDidLoad 。
答案 1 :(得分:49)
将默认rowHeight
放在viewDidLoad
或awakeFromNib
中。正如Martin R.指出的那样,您无法从cellForRowAtIndexPath
heightForRowAtIndexPath
self.tableView.rowHeight = 44.0
答案 2 :(得分:10)
yourTableView.rowHeight = UITableViewAutomaticDimension
试试这个。
答案 3 :(得分:6)
正如评论中所指出的,您无法在cellForRowAtIndexPath
内拨打heightForRowAtIndexPath
。
您可以做的是创建一个用于填充数据的模板单元格,然后计算其高度。 此单元格不参与表格渲染,可以重复使用它来计算每个表格单元格的高度。
简而言之,它包括使用您要显示的数据配置模板单元格,使其根据内容调整大小,然后读取其高度。
我从我正在处理的项目中获取了这段代码 - 不幸的是,它是在Objective C中,我认为你不会在转换为swift时遇到问题
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static PostCommentCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sizingCell = [self.tblComments dequeueReusableCellWithIdentifier:POST_COMMENT_CELL_IDENTIFIER];
});
sizingCell.comment = self.comments[indexPath.row];
[sizingCell setNeedsLayout];
[sizingCell layoutIfNeeded];
CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height;
}
答案 4 :(得分:5)
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
var height:CGFloat = CGFloat()
if indexPath.row == 1 {
height = 150
}
else {
height = 50
}
return height
}
答案 5 :(得分:2)
问题原因:
问题在于该单元尚未创建。 TableView首先计算行的高度,然后填充每一行的数据,因此在调用heightForRow方法时未创建rows数组。因此,您的应用正在尝试访问其没有权限的存储位置,因此您会收到EXC_BAD_ACCESS
消息。
如何在TableViewCell
中实现UITableView
的自我调整:
只需为TableViewCell
中StoryBoard
的视图中包含的视图设置适当的约束即可。请记住,您不应该为TableViewCell的根视图设置高度限制,它的高度应该可以通过其子视图的高度正确计算-就像您为UIScrollView
设置适当的限制一样。这样,您的单元格将根据其子视图获得不同的高度。无需其他操作
答案 6 :(得分:1)
确保您的TableView代表也正常工作。 如果不是那么 在你的故事板或.xib中 按住Control +右键单击tableView拖放到当前ViewController。 swift 2.0
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 60.0;
}
答案 7 :(得分:-1)
尝试像这样复制并粘贴在类
中的代码func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}