Viftack / HStack में SwiftUI डुप्लिकेट बॉर्डर

Aug 18 2020

मैं एक HStack और VStack में कई टाइलें देख रहा हूं। हर टाइल के चारों ओर एक सीमा होनी चाहिए। मुझे जो समस्या आ रही है, वह यह है कि, मैं अपने स्टैक में कोई अंतर नहीं रखना चाहता। हालाँकि, जिसके परिणामस्वरूप डुप्लिकेट बॉर्डर होता है क्योंकि व्यू एक दूसरे के बगल में होता है।

यहाँ मेरा उदाहरण है:

struct TileMain: View {
    
    var body: some View {

        VStack
        {
            HStack(spacing: 0.0)
            {
                Tile()
                    .border(Color.red, width: 1.0)
                Tile()
                    .border(Color.red, width: 1.0)
                Tile()
                    .border(Color.red, width: 1.0)
            }
            HStack(spacing: 0.0)
            {
                Tile()
                .border(Color.red, width: 1.0)

                Tile()
                    .border(Color.red, width: 1.0)
                
                Tile()
                    .border(Color.red, width: 1.0)
            }
            .padding(.bottom, 15)
        }
    }
}
struct Tile : View
{
    var body: some View
    {
        VStack
        {
            Spacer()
            Text("Test")
            Spacer()
        }.frame(width: 150, height: 150)
    }
}

सबसे नीचे की सीमा में 1.0 चौड़ाई है। हालांकि, हर जगह जहां एक पड़ोसी है, सीमा 2.0 चौड़ी होगी। क्या उसके लिए कोई काम है? मुझे केवल विशेष किनारों पर सीमा निर्धारित करने की आवश्यकता होगी, इसलिए मुझे कोई दोहराव नहीं मिलेगा। लेकिन स्विफ्टयूआई में मेरा डिफ़ॉल्ट संभव नहीं है।

जवाब

1 Asperi Aug 18 2020 at 15:32

आइए, हम अपने दिमाग को उल्टा कर लें ... और निम्नलिखित चीजों का उपयोग करें

Xcode 11.4 / macOS 10.15.6 के साथ परीक्षण किया गया

struct TileMain: View {

    var body: some View {

        VStack(spacing: 1)
        {
            HStack(spacing: 1)
            {
                Tile()
                Tile()
                Tile()
            }
            HStack(spacing: 1)
            {
                Tile()
                Tile()
                Tile()
            }
        }
        .padding(1)
        .background(Color.red)
    }
}
struct Tile : View
{
    var body: some View
    {
        VStack
        {
            Spacer()
            Text("Test")
            Spacer()
        }.frame(width: 150, height: 150)
        .background(Color(NSColor.windowBackgroundColor))
    }
}
1 lvollmer Aug 19 2020 at 14:34

आप रिक्ति का उपयोग कर सकते हैं: -1.0 (या जो भी आपकी सीमा चौड़ाई है) :)

struct TileMain: View {
  var body: some View {
    VStack(spacing: -1.0)
    {
      HStack(spacing: -1.0)
      {
        Tile()
          .border(Color.red, width: 1.0)
        Tile()
          .border(Color.red, width: 1.0)
        Tile()
          .border(Color.red, width: 1.0)
      }
      HStack(spacing: -1.0)
      {
        Tile()
        .border(Color.red, width: 1.0)
        Tile()
          .border(Color.red, width: 1.0)
        Tile()
          .border(Color.red, width: 1.0)
      }
      .padding(.bottom, 15)
    }
  }

}