首页 > 解决方案 > SwiftUI 中的左右填充(不是前导和尾随)

问题描述

SwiftUI 中的填充修饰符采用EdgeInsets,例如

.padding(.leading, 8)

但是,只有前导和尾随的 EdgeInsets,而不是左右。这带来了一个问题,因为并非 RTL 语言中的所有内容都必须与 LTR 语言中的显示方式相反。

有没有办法实现与填充修饰符相同或相似的效果,无论语言的方向如何,它都会强制填充在左侧或右侧?

标签: iosswiftuipaddingright-to-left

解决方案


这是可能方法的简化演示 - 使用Spacer在每侧注入固定大小的扩展。

使用 Xcode 13 / iOS 15 准备和测试

enum Side: Equatable, Hashable {
    case left
    case right
}

extension View {
    func padding(sides: [Side], value: CGFloat = 8) -> some View {
        HStack(spacing: 0) {
            if sides.contains(.left) {
                Spacer().frame(width: value)
            }
            self
            if sides.contains(.right) {
                Spacer().frame(width: value)
            }
        }
    }
}

使用演示

var body: some View {
  TextField("Last Name", text: $nameLast)
    .textFieldStyle(.roundedBorder)
    .padding(sides: [.left], value: 20)
}

演示


推荐阅读