iOS / Swift:UITableViewCell高度问题

时间:2016-04-27 00:32:47

标签: ios swift uitableview height

我写了一个UITableView,它有自定义UITableViewCell,数据加载和表数据填充没有问题,但是单元格高度错误,每个单元格的内容只有一半可见(参见附页截图)

tableview cell xib

.xib我有一个UITableViewCell文件(如上面的第二个屏幕截图所示),并编写了一个用UITableViewCell实现覆盖layoutSubviews()类的类下面,我使用[Neon][3]库来进行UI元素的定位/布局:

override func layoutSubviews() {
        super.layoutSubviews()
        self.contentView.clipsToBounds = true


        avatarImage.anchorInCorner(.TopLeft, xPad: 2, yPad: 2, width: 15, height: 15)
        postedByUsername.align(.ToTheRightCentered, relativeTo: avatarImage, padding: 1, width: 190, height: 15)

        timeAgo.anchorInCorner(.TopRight, xPad: 2, yPad: 2, width: 130, height: 15)

        questionTitle.alignAndFill(align: .UnderMatchingLeft, relativeTo: avatarImage, padding: 3)
        firstAttachedImage.align(.ToTheRightMatchingTop, relativeTo: questionTitle, padding: 3, width: 40, height: 40)

        self.answerButton.setFAText(prefixText: "", icon: FAType.FAReply, postfixText: "2", size: 14, forState: .Normal)
        self.commentButton.setFAText(prefixText: "", icon: FAType.FACommentO, postfixText: "1", size: 14, forState: .Normal)
        self.likeButton.setFAText(prefixText: "", icon: FAType.FAHeartO, postfixText: "10", size: 14, forState: .Normal)

        answerCommentLikeStackView.align(.UnderMatchingLeft, relativeTo: questionTitle, padding: 3, width: 190, height: 30)

        self.setNeedsUpdateConstraints()        
    }

在我的UITableViewController实现中,我设置了如下的单元格/行高:

 self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 150
        self.tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0)
        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine

        // disable horizontal scroll
        self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.width, self.tableView.contentSize.height)

但是细胞高度仍然是错误的,我还能做些什么来使身高看起来正确?

2 个答案:

答案 0 :(得分:1)

不要设置tableView.rowHeight = x,而是尝试覆盖heightForRowAtIndexPath方法:

override func tableView(tableView: UITableView, heightForRowAtIndexPathindexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

应该为表视图呈现的每个单元格调用它,并相应地调整它的大小。

答案 1 :(得分:1)

我喜欢使用cellForRowAtIndexPath函数。这样你的rowHeight被设置在用数据填充表的相同函数中:

//Fills up the tableview with data
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("YourCell", forIndexPath: indexPath) as! YourCell

    //This is where the magic is happening
    tableView.rowHeight = 75;

    return cell
}