UICollectionViewCell用于动态单元格宽度swift问题的虚线边框

时间:2017-11-08 14:50:07

标签: swift uitableview uicollectionview uicollectionviewcell uicollectionviewflowlayout

在UITableViewCell下使用UICollectionView

使用以下扩展名创建虚线边框:     扩展UIView {

    func addDashedLineView(frame: CGRect) {

        let border = CAShapeLayer()
        border.strokeColor = UIColor.blue.cgColor
        border.lineDashPattern = [6, 6]
        border.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)//self.frame
        border.fillColor = UIColor.clear.cgColor
        border.lineJoin = kCALineJoinRound
        //print("widht: \(frame.width) fraheight: \(UIScreen.main.bounds.width)")
        border.fillColor = nil
        border.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: frame.width, height: frame.height), cornerRadius: 6).cgPath
        self.clipsToBounds = true

        self.layer.addSublayer(border)
    }
}

下面是我的集合视图方法,其中我调用上面的方法(实际上单元格宽度取决于内容大小,所以我正在计算文本宽度)问题是当单元格从列表中出列时边框从不同的重绘宽度,我也在使用自定义单元" CollectionViewCell"类:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: CollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell


       let width = self.collectionData[indexPath.row].width(withConstraintedHeight: 14, font: .systemFont(ofSize: 17)) + Constant.cellPadding
        cell.contentView.addDashedLineView(frame: CGRect(x: 0, y: 0, width: width, height: Constant.itemHeight))

        cell.contentView.setNeedsLayout()
        cell.contentView.layoutIfNeeded()
        cell.layoutIfNeeded()
        return cell
    }

滚动视图时首次正确加载绘图边框时,它已重绘 如何解决问题 enter image description here

0 个答案:

没有答案