如何使用 ZStack 和 SwiftUI 剪辑子视图?
How to clip subviews using ZStack with SwiftUI?
我需要使用其矩形来裁剪文本后面的视图。当我在这个 1 像素高的矩形上添加一个文本时,我需要它“剪辑”下面的子视图,这样文本就可以阅读了。
当然,如果我使用纯色背景,这很容易做到,因为我只是设置它,它会裁剪子视图。
这里有一个 POC 来测试它:
struct test: View {
let gradient = Gradient(colors: [Color.blue, Color.purple])
var body: some View {
ZStack {
Rectangle()
.fill(LinearGradient(gradient: gradient, startPoint: .leading, endPoint: .trailing))
.frame(width: 200, height: 200)
ZStack {
Rectangle()
.fill(Color.white)
.frame(width: 100, height: 1, alignment: .center)
Text("XXXX")
.background(Color.green)
}
}
}
}
有什么想法吗?我不认为我可以使用面具来处理它。
有时解决方案可能是 not-to-do 而不是 to-do-but.
下面是解决您问题的上述原则的可能实现。
var body: some View {
ZStack {
Rectangle()
.fill(LinearGradient(gradient: gradient, startPoint: .leading, endPoint: .trailing))
.frame(width: 200, height: 200)
HStack(spacing: 0) {
Rectangle()
.fill(Color.white)
.frame(width: 30, height: 1, alignment: .center)
Text("XXXX")
Rectangle()
.fill(Color.white)
.frame(width: 30, height: 1, alignment: .center)
}
}
我需要使用其矩形来裁剪文本后面的视图。当我在这个 1 像素高的矩形上添加一个文本时,我需要它“剪辑”下面的子视图,这样文本就可以阅读了。
当然,如果我使用纯色背景,这很容易做到,因为我只是设置它,它会裁剪子视图。
这里有一个 POC 来测试它:
struct test: View {
let gradient = Gradient(colors: [Color.blue, Color.purple])
var body: some View {
ZStack {
Rectangle()
.fill(LinearGradient(gradient: gradient, startPoint: .leading, endPoint: .trailing))
.frame(width: 200, height: 200)
ZStack {
Rectangle()
.fill(Color.white)
.frame(width: 100, height: 1, alignment: .center)
Text("XXXX")
.background(Color.green)
}
}
}
}
有什么想法吗?我不认为我可以使用面具来处理它。
有时解决方案可能是 not-to-do 而不是 to-do-but.
下面是解决您问题的上述原则的可能实现。
var body: some View {
ZStack {
Rectangle()
.fill(LinearGradient(gradient: gradient, startPoint: .leading, endPoint: .trailing))
.frame(width: 200, height: 200)
HStack(spacing: 0) {
Rectangle()
.fill(Color.white)
.frame(width: 30, height: 1, alignment: .center)
Text("XXXX")
Rectangle()
.fill(Color.white)
.frame(width: 30, height: 1, alignment: .center)
}
}