使用Swift3在ios10中使用UITableView自定义单元格重叠

时间:2016-10-19 07:37:38

标签: ios uitableview swift3 xcode8 ios10

我正在制作UITableView自定义单元格,因为每个单元格的高度也发生了变化。

这是我初始化单元格的代码,之后我想将UITextView添加为Subview。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
    let dictAd = self.arrAllQuestions[indexPath.row] as! NSDictionary

    let fontNew = UIFont(name: "AvenirNext-Regular", size: 19.0)
    let strA = "\(indexPath.row+1). \(dictAd.object(forKey: "Title")!)"

    let heightTitle = self.heightForView(text: strA, font: fontNew!, width: tableView.frame.size.width-16)

    return heightTitle+5;
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let dictAd = self.arrAllQuestions[indexPath.row] as! NSDictionary

    let cell = tableView.dequeueReusableCell(withIdentifier: "quesionCell", for: indexPath) as! QuestionCell

    let fontNew = UIFont(name: "AvenirNext-Regular", size: 19.0)

    let strA = "\(indexPath.row+1). \(dictAd.object(forKey: "Title")!)"

    cell.lblName.font = fontNew
    cell.lblName.text = strA
    cell.lblName.numberOfLines = 0
    let heightTitle = self.heightForView(text: strA, font: fontNew!, width: tableView.frame.size.width-16)

    var frame = cell.lblName.frame as CGRect
    frame.size.height = heightTitle; //you need to adjust this value
    cell.lblName.frame = frame;


    let txtView = AnimatableTextView(frame: CGRect(x: 8, y: cell.lblName.frame.origin.y+cell.lblName.frame.size.height+5, width: tableView.frame.size.width-16, height: 25))
    txtView.borderWidth = 1.0
    txtView.borderColor = UIColor.lightGray
    txtView.cornerRadius = 4.0
    cell.contentView.addSubview(txtView)

    return cell
}

您可以在下面看到输出。

enter image description here

2 个答案:

答案 0 :(得分:3)

您的heightForRowAtIndexPath中的高度计算似乎不合适。考虑使用UITableViewAutomaticDimension和Autolayout来使用自调整单元来解决您的问题。 Here是一个很棒的教程,可以帮助您入门。如果您在单元格中使用UITextView或其子类,并且您希望它将内容集的高度设置为其可滚动属性为false,则还有一个建议。

答案 1 :(得分:1)

在viewDidLoad中声明此内容 希望这会对你有所帮助

tableView.estimatedRowHeight = 44