SwiftUI中如何实现圆角矩形的均匀分布虚线轮廓?
SwiftUI 实现均匀分布的圆角矩形虚线轮廓
在SwiftUI中,我们常需要制作带虚线轮廓的自定义列表项,用作「添加项提示」。常规做法是通过strokeBorder实现,示例代码如下(代码中虚线长度10可根据视觉效果调整):
struct ContentView: View { let items:[String] = ["a","b","c"] @State var itemsEmpty = false var body: some View { Text("toggle").onTapGesture { itemsEmpty.toggle() } VStack { Spacer() if !itemsEmpty { List{ ForEach(items, id: \.self) {item in Text(item) } } } else { // 「添加项提示」视图 List{ Text("ADD") .listRowBackground( RoundedRectangle(cornerSize: CGSize(width: 15, height: 15)) .strokeBorder(style: StrokeStyle(lineWidth: 4, dash: [10])) ) } } Spacer() } .padding() } }
这种方案包括苹果官方示例都在使用,但存在明显问题:虚线分布不均匀,且首尾衔接处会出现难看的截断。
我尝试过几种不理想的解决方案:
- 方案A:用两个镜像形状组合视图,但仍会出现截断,仅能实现对称截断,无法解决根本问题;
- 方案B:用类似「阳光射线」的径向渐变,堆叠两个圆角矩形模拟虚线轮廓,但线段首尾无法与轮廓路径垂直,因为所有“射线”均源自同一点;
- 方案C:用squircle(圆角方形,超椭圆用作矩形时视觉效果不佳)的参数方程,切割拉伸后创建路径,再通过
t=2π/除数确定分辨率,沿路径绘制间断线段。但修改后的形状为分段函数,无法由t驱动,即便可行,线段尺寸也无法保持规则。
请问如何实现均匀分布的圆角矩形虚线轮廓?
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

