You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:46:19