Ste*_*e M 15 padding right-to-left ios swiftui
SwiftUI 中的填充修饰符采用EdgeInsets,例如
.padding(.leading, 8)
但是,只有前导和尾随 EdgeInsets,而不是左和右。这带来了一个问题,因为并非 RTL 语言中的所有内容都必须与 LTR 语言中的显示方式相反。
有没有办法实现与 padding 修饰符相同或相似的效果,无论语言的方向性如何,它都会强制填充位于左侧或右侧?
Asp*_*eri 14
这是可能方法的简化演示 - 使用在每一侧注入固定大小的扩展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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用演示
var body: some View {
TextField("Last Name", text: $nameLast)
.textFieldStyle(.roundedBorder)
.padding(sides: [.left], value: 20)
}
Run Code Online (Sandbox Code Playgroud)
Edi*_*Edi 11
对我来说是
VStack(alignment: .center) {
Text("Car")
.font(.body)
.foregroundColor(.black)
}
.padding(.trailing, 5)
Run Code Online (Sandbox Code Playgroud)
用于@Environment(\\.layoutDirection)获取当前布局方向(LTR 或 RTL)并根据需要使用它来翻转.leading和。.trailing
这里\xe2\x80\x99sViewModifier方便地包装了所有这些:
enum NoFlipEdge {\n case left, right\n}\n\nstruct NoFlipPadding: ViewModifier {\n let edge: NoFlipEdge\n let length: CGFloat?\n @Environment(\\.layoutDirection) var layoutDirection\n \n private var computedEdge: Edge.Set {\n if layoutDirection == .rightToLeft {\n return edge == .left ? .trailing : .leading\n } else {\n return edge == .left ? .leading : .trailing\n }\n }\n \n func body(content: Content) -> some View {\n content\n .padding(computedEdge, length)\n }\n}\n\nextension View {\n func padding(_ edge: NoFlipEdge, _ length: CGFloat? = nil) -> some View {\n self.modifier(NoFlipPadding(edge: edge, length: length))\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n像使用标准填充修饰符一样使用它:
\nText("Text")\n .padding(.left, 10)\nRun Code Online (Sandbox Code Playgroud)\n
小智 7
struct ContentView: View {
var body: some View {
Text("Hello, SwiftUI!")
.padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20)) // Apply custom padding values
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
45063 次 |
| 最近记录: |