Как обрезать подпредставления с помощью ZStack с 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)
      }
    }
  }
}

Любые идеи? Не думаю, что смогу справиться с этим с помощью маски.

1 ответ

Решение

Иногда решением может быть " не делать", а не " делать-но".

Вот возможная реализация вышеуказанного принципа для решения вашей проблемы.

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)
        }
    }
Другие вопросы по тегам