swift UITableView设置rowHeight

时间:2014-09-02 21:06:45

标签: xcode swift uitableview

我正尝试使用以下代码将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)

8 个答案:

答案 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放在viewDidLoadawakeFromNib中。正如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的自我调整:
只需为TableViewCellStoryBoard的视图中包含的视图设置适当的约束即可。请记住,您不应该为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
    }