Style — border

SwiftUI 中,border() 是一个修饰符,用于为视图添加边框。它可以为视图添加简单的矩形边框,并允许你设置边框的颜色与宽度。border() 提供了创建简单 UI 边框的便捷方式。


基本语法 #

.viewModifier.border(Color, width: CGFloat)

参数: #

  1. Color: 设置边框的颜色(可以使用系统或自定义颜色)。
  2. width: 指定边框的宽度(CGFloat 类型)。默认值为 1。

基本使用示例 #

示例 1: 为 Text 添加边框 #

Text("Hello, SwiftUI!")
    .padding()
    .border(Color.blue, width: 2) // 添加蓝色宽度为 2 的边框

效果: #

  • 文字周围会添加一个蓝色的矩形边框。
  • 边框大小是包裹视图内容后的尺寸(包括 padding() 的部分)。

与其他布局修饰符组合 #

border() 通常会与布局修饰符(如 padding, frame)搭配使用,尤其是控制边框与内容之间的间距。

示例 2: 添加边距与边框 #

Text("SwiftUI Border Example")
    .padding(10) // 为文本内容添加额外的10点间距
    .border(Color.red, width: 3) // 红色边框包裹内容及其间距

示例 3: 自定义视图大小与边框 #

你可以使用 frame() 设置固定大小,用 border() 绘制边框。

Rectangle()
    .fill(Color.yellow)
    .frame(width: 100, height: 100) // 设置固定尺寸
    .border(Color.green, width: 5) // 绿色宽边框

注意: #

  • 如果没有设置 frame()border 会自动包裹内容的大小。
  • fill() 一起使用时,边框只包裹固定的内容区域。

在多种形状视图中使用 #

  1. 圆角矩形边框(需要 Combined 修饰符) 默认情况下,border() 仅提供简单矩形边框。如果你需要圆角边框,可以使用 overlay()RoundedRectangle

    示例:

    Text("Rounded Corners Example")
        .padding()
        .background(Color.gray.opacity(0.2)) // 背景填充
        .overlay(
            RoundedRectangle(cornerRadius: 10) // 创建圆角边框
                .stroke(Color.blue, lineWidth: 2) // 蓝色边框和宽度
        )
    
  2. 为 Circle 添加边框 圆形视图没有显式的 border(),但可以通过 overlay() 达成类似效果。

    示例:

    Circle()
        .fill(Color.purple) // 填充紫色
        .frame(width: 100, height: 100) // 固定大小
        .overlay(
            Circle()
                .stroke(Color.red, lineWidth: 5) // 红色边框
        )
    

动态圆角和路径边框 #

如果自带的 border() 无法满足设计需求,可以使用 stroke()strokeBorder() 创建更灵活的边框样式。

示例 1: 使用 RoundedRectangle 创建矩形边框 #

RoundedRectangle(cornerRadius: 20)
    .stroke(Color.orange, lineWidth: 4) // 橙色4点宽的边框
    .frame(width: 150, height: 100) // 自定义大小

示例 2: 支持复杂边框的 Path 示例 #

Path { path in
    path.addRoundedRect(in: CGRect(x: 0, y: 0, width: 100, height: 60), cornerSize: CGSize(width: 10, height: 10))
}
.stroke(Color.teal, lineWidth: 3)

全边框与部分边框 #

border() 默认在视图的四边添加边框。如果你需要针对某一条或多条边添加边框,则需颜色和布局调整结合实现。

示例: 单边边框实现 #

VStack {
    Text("Top Border Only")
        .padding()
        .overlay(
            Rectangle()
                .frame(height: 2) // 设置高度,实现顶部边框效果
                .foregroundColor(.blue)
                .frame(maxHeight: .infinity, alignment: .top) // 边框对齐到顶部
        )
}

注意: #

  • SwiftUI 自身的原生 border() 暂时不支持独立边框,需结合 overlay 实现某一特定边的效果。

当边框与 Safe Area 冲突时 #

如果边框被安全区(Safe Area)遮挡,可以结合 ignoresSafeArea 修饰符来扩展边框区域。

Rectangle()
    .fill(Color.clear) // 半透明背景
    .border(Color.purple, width: 3)
    .ignoresSafeArea() // 忽略安全区(如刘海区域)

实际使用的设计场景及建议 #

  1. 简单的边框样式: 使用 border(Color, width:) 为文本、图片或小时图搭建简单的矩形边框。

  2. 自定义边框样式: 对于非矩形边框(如 圆角、单边),使用 overlayPath 达到目标。

  3. 动态边框外观: 可结合 Animation,通过视图状态变化动态调整边框样式(比如点击时高亮边框)。


综合案例:整合边框与复杂布局 #

struct ComplexBorderView: View {
    var body: some View {
        VStack {
            Text("Styled Border Example")
                .padding()
                .overlay(
                    RoundedRectangle(cornerRadius: 10)
                        .stroke(Color.orange, lineWidth: 3) // 圆角边框
                )
                .padding()

            Circle()
                .fill(Color.blue.opacity(0.2))
                .frame(width: 150, height: 150)
                .overlay(
                    Circle().stroke(Color.pink, lineWidth: 5) // 添加粉色圆形边框
                )
                .padding()

            Rectangle()
                .fill(Color.clear)
                .frame(width: 200, height: 100)
                .border(Color.green, width: 4) // 直接添加绿色边框
        }
        .padding()
    }
}

总结 #

  • 基本用法border(Color, width:) 是添加简单矩形边框的快速方法。
  • 复杂边框:对于圆角、单边或更复杂的样式,使用 overlayPath
  • 场景应用:适用于基本布局美化、装饰性边框、模块化设计边界等。
本文共 1257 字,上次修改于 Jan 21, 2025