首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用SwiftUI圆特定边框角

用SwiftUI圆特定边框角
EN

Stack Overflow用户
提问于 2022-11-10 13:01:44
回答 1查看 35关注 0票数 0

我试图在视图中添加一个边框,并且只在topLeading和topTrailing角附近。这似乎是极其困难的?只要用这个分机号绕过拐角处就很容易了:

代码语言:javascript
复制
struct RoundedCorner: Shape {

    var radius: CGFloat = .infinity
    var corners: UIRectCorner = .allCorners

    func path(in rect: CGRect) -> Path {
        let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        return Path(path.cgPath)
    }
}

extension View {
    func cornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View {
        clipShape( RoundedCorner(radius: radius, corners: corners) )
    }
}

但是当你中风的时候,这是行不通的。有什么办法可以做到吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-10 23:40:57

在SwiftUI中向视图添加边框的常见方法是通过.overlay()修饰符。使用您已经创建的RoundedCorner形状,我们可以修改this answer以创建一个新的修饰符,该修饰符将绕过该形状并添加一个边框。

代码语言:javascript
复制
struct RoundedCorner: Shape {
    
    var radius: CGFloat = .infinity
    var corners: UIRectCorner = .allCorners
    
    func path(in rect: CGRect) -> Path {
        let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        return Path(path.cgPath)
    }
}

extension View {
    public func borderRadius<S>(_ content: S, width: CGFloat = 1, cornerRadius: CGFloat, corners: UIRectCorner) -> some View where S : ShapeStyle {
        let roundedRect = RoundedCorner(radius: cornerRadius, corners: [.topLeft, .topRight])
        return clipShape(roundedRect)
            .overlay(roundedRect.stroke(content, lineWidth: width))
    }
}

用法:

代码语言:javascript
复制
Color.yellow
.borderRadius(Color.red, width: 15, cornerRadius: 25, corners: [.topLeft, .topRight])
.padding()
.frame(width: 300, height: 150)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74389429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档