动态创建高度的单元格重叠。

嗨,我是IOS开发的新手,对网页开发比较熟悉。我遇到了一个问题,我的单元格最初是按照我的期望呈现的,但在滚动到底部和回滚到屏幕顶部后,我注意到单元格开始相互重叠。在阅读了其他堆栈溢出的帖子后,我开始认为这与我如何创建单元格有关。我试图在一个单元格中用for循环创建多个标签,就像有人用PHP开发网页一样,我想知道这是否是正确的方法,这是否是一个可能的原因。

                       for i in 0...bars.count-1 {
                            var barLabelView:UIView = UIView()
                            var barLabel:UILabel = UILabel()
                            barLabelView.frame = CGRect(x: 20, y: CGFloat(20 + (70 * i)), width: barView.frame.width-40, height: 50)
                            barLabelView.backgroundColor = UIColor(displayP3Red: 27/255.0, green: 99/255.0, blue: 222/255.0, alpha: 1)
                            barLabelView.layer.cornerRadius = 10
                            barLabel.frame = CGRect(x: 0, y: 0, width: barLabelView.frame.width-10, height: 50)
                            barLabel.text = bars[i]
                            barLabel.textAlignment = .center
                            barLabel.numberOfLines = 0
                            barLabel.font = UIFont(name: "Chalkboard SE", size: 15)
                            barView.addSubview(barLabelView)
                            barLabelView.addSubview(barLabel)

                        }

另外,这里是我如何设置单元格的高度。

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let crawlNameText = self.posts[indexPath.row].text
        let size = CGSize(width: view.frame.width - 40, height: 1000)
        let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
        let estimatedCrawlNameFrame = NSString(string: crawlNameText).boundingRect(with: size, options: options, attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16)], context: nil)


        let bars = posts[indexPath.row].bars.components(separatedBy: ", ")
        let buds = posts[indexPath.row].buds.components(separatedBy: ", ")

        if (self.posts[indexPath.row].type == "crawl") {

            var cellHeightP1 = CGFloat(estimatedCrawlNameFrame.height + 110 + 20 + 20 + 20 + 40 + 60)
            var cellHeightP2:CGFloat = CGFloat( 80 * bars.count)
            var cellHeightP3:CGFloat = CGFloat( 80 * buds.count)
            var cellHeight = cellHeightP1 + cellHeightP2 + cellHeightP3

            return cellHeight
        } else {
             return estimatedCrawlNameFrame.width + 110 + 20
        }
    }

下面是我的cellForRowAt函数

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            var cell = nfTV.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! newsFeedCell

             // Im guessing I would set the cell to nill here to clear the buttons I made

            cell.setPost(post: posts[indexPath.row])

            if (cell.profilePic != nil){
                cell.profilePic.layer.cornerRadius = cell.profilePic.bounds.height / 2
                cell.profilePic.clipsToBounds = true
            }

            cell.backgroundColor = UIColor.lightGray

            print("made it here")

            print(indexPath.row)

            cell.frame = CGRect(x: 0, y: 0, width: cell.frame.width, height: cell.frame.height)



            return cell
}

我读到我可能必须在重新使用之前清除我的单元格,但我不确定如何将单元格设置为零。我也想知道是否使用集合视图会更好,但我不知道那和tableview之间的区别。任何帮助或建议都是感激的,谢谢。

解决方案:

我已经回答了我自己的问题,但我想我会留下这个问题,以备将来对任何人有帮助。

我在cellForRowAt函数的注释处添加了以下几行代码,以删除按钮

 for v in cell.barView.subviews{
       v.removeFromSuperview()
    }

    for v in cell.budsView.subviews{
       v.removeFromSuperview()
    }

这个问题是由于一些单元格的按钮比其他单元格多,所以按钮较少的单元格被渲染了更多的按钮,看起来像是重叠,但实际上只是回收了按钮。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在句子中找到大写的O,但在句首没有找到。

2022-9-8 11:55:36

未分类

在Mac上不显示错误的按摩,但在Windows上完美的工作。

2022-9-8 11:55:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索