ios – UITableViewCell drawRect底部边框在insertRow上消失

ios – UITableViewCell drawRect底部边框在insertRow上消失,第1张

概述我有一个自定义UITableViewCell,我使用drawRect绘制一个简单的底部边框: override func drawRect(rect: CGRect) { let context = UIGraphicsGetCurrentContext() CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetM 我有一个自定义UItableVIEwCell,我使用drawRect绘制一个简单的底部边框:

overrIDe func drawRect(rect: CGRect) {      let context = UIGraphicsGetCurrentContext()   CGContextMovetoPoint(context,CGRectGetMinX(rect),CGRectGetMaxY(rect))   CGContextAddlinetoPoint(context,CGRectGetMaxX(rect),CGRectGetMaxY(rect))   CGContextSetstrokecolorWithcolor(context,UIcolor(netHex: 0xEFEEF4).CGcolor)   CGContextSetlinewidth(context,2)   CGContextstrokePath(context)}

这非常有效.但是,当我插入带动画的行时,所有单元格的边框消失,并在插入动画完成时再次出现:

tableVIEw.insertRowsAtIndexPaths([NSIndexPath(forRow: cells.count - 1,inSection: 0)],withRowAnimation: UItableVIEwRowAnimation.Fade)

知道怎么避免这个吗?

解决方法 那么你可以在tablecell的awakeFromNib中尝试这个代码,如果你只想使用CALayers,假设你的tableVIEw覆盖了设备的整个宽度.

overrIDe func awakeFromNib() {    super.awakeFromNib()    let borderLayer = CALayer()    let lineHeight:CGfloat = 2    borderLayer.frame = CGRect(x: 0,y: self.frame.height - lineHeight,wIDth: UIScreen.mainScreen().bounds.wIDth,height: lineHeight)    borderLayer.backgroundcolor = UIcolor.redcolor().CGcolor    self.layer.addSublayer(borderLayer)}

你会得到输出:

还要使您的tablevIEw分隔符颜色清除

self.tableVIEw.separatorcolor = UIcolor.clearcolor()

这样它就不会与你的图层重叠.

我可以观察到,无论何时插入新行,现在没有细胞边界消失.

另外

我们可以在单元格故事板中使用UIImageVIEw并提供具有以下约束的颜色.
添加UIImageVIEw

向UIImageVIEw添加约束

我们完成了!

使用BezIEr Paths还有另一种替代解决方案可以实现这一目标

overrIDe func awakeFromNib() {    super.awakeFromNib()    let line = CAShapeLayer()    let linePath = UIBezIErPath()    linePath.movetoPoint(CGPointMake(0,self.frame.height))    linePath.addlinetoPoint(CGPointMake(UIScreen.mainScreen().bounds.wIDth,self.frame.height))    line.linewidth = 3.0    line.path = linePath.CGPath    line.strokecolor = UIcolor.redcolor().CGcolor    self.layer.addSublayer(line) }

这也产生相同的输出.

编辑:
如果我们没有为单元格使用故事板或笔尖并以编程方式创建单元格,那么我们可以执行以下解决方法:

在CustomtableVIEwCell类中创建一个属性

var borderLayer:CALayer!

现在在CustomtableVIEwCell类中有一个名为layoutSubvIEws的方法

overrIDe func layoutSubvIEws() {    if(borderLayer != nil) {        borderLayer.removeFromSuperlayer()    }    borderLayer = CALayer()    let lineHeight:CGfloat = 2    borderLayer.frame = CGRect(x: 0,height: lineHeight)    borderLayer.backgroundcolor = UIcolor.redcolor().CGcolor    self.layer.addSublayer(borderLayer)}

试试吧.

总结

以上是内存溢出为你收集整理的ios – UITableViewCell drawRect底部边框在insertRow上消失全部内容,希望文章能够帮你解决ios – UITableViewCell drawRect底部边框在insertRow上消失所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1014419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存