修改CAShapeLayer的bounds高度未改尺寸却变位置问题排查
问题原因及解决方法
核心原因
CAShapeLayer的显示形状由**path属性**完全决定,你修改bar.bounds.size.height只是调整了图层的边界范围,并没有改变底层的贝塞尔路径(bar.path),所以图形本身的高度不会变化。- 由于你将图层的
anchorPoint设置为(0, 1)(矩形左下角),修改bounds.height时,图层的position是相对锚点计算的,这会导致整个图层向上偏移——表现为图形底部上移、顶部也跟着上移,但图形高度始终是最初创建的100。
正确的修改方式
要改变矩形高度,需要重新生成对应的贝塞尔路径并赋值给bar.path,同时可以同步更新bounds保持一致:
// 重新创建高度为150的矩形路径 let newBarSize = CGSize(width: bar.bounds.size.width, height: 150) let newBarPath = UIBezierPath(rect: CGRect(origin: .zero, size: newBarSize)) bar.path = newBarPath.cgPath // 同步更新bounds(可选,但能让图层边界和图形匹配) bar.bounds = CGRect(origin: .zero, size: newBarSize)
内容的提问来源于stack exchange,提问作者caminante errante
相关产品推荐
相关产品推荐

