SwiftUI VStack / HStack'te çoğaltılmış kenarlık
Bir HStack ve VStack'te birçok fayans Görünümüne sahibim. Her karonun etrafında bir sınır olmalıdır. Karşılaştığım sorun şu ki, Stack'imde herhangi bir boşluk olmasını istemiyorum. Ancak bu, Görünüm birbirinin yanında yer alırken kenarlığın çoğaltılmasına neden olur.
İşte benim örneğim:
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)
}
}

Alttaki sınır 1.0 genişliğe sahiptir. Ancak komşunun olduğu her yerde sınır 2.0 genişliğinde olacaktır. Bunun için herhangi bir çalışma var mı? Kenarlığı yalnızca özel kenarlarda ayarlamam gerekecek, bu yüzden herhangi bir kopya almıyorum. Ancak SwiftUI'deki varsayılanım bu mümkün değil.
Yanıtlar
Hadi zihnimizi alt üst edelim ... ve aşağıdaki gibi bir şey kullanalım
Xcode 11.4 / macOS 10.15.6 ile test edildi

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))
}
}
Aralığı kullanabilirsiniz: -1.0 (veya kenarlık genişliğiniz ne olursa olsun) :)
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)
}
}
}