SwiftUI - skąd mi się bierze ekstra spacing?

0

Nie rozumiem pewnej rzeczy w SwiftUI w stylowaniu Widgetu.

struct CaseStatView: View {
    let id: String
    let price: Float
    
    var body: some View {
        HStack {
            Image(uiImage: (UIImage(named: "btc.png")!))
                .resizable()
                .scaledToFit()
//                .scaleEffect(0.7)
            Text(id)
                .font(.system(size: 16, weight: .semibold))
            Spacer()
            Text(String(price))
                .font(.system(size: 12, weight: .regular))
        }
        .frame(maxHeight: .infinity)
        .background(Color.yellow)
    }
    
}

screenshot-20210506201834.png

struct CryptoView: View {
    var entry: CryptoEntry
    
    var body: some View {
        VStack {
            CaseStatView(id: entry.crypto[0].id, price: entry.crypto[0].current_price)
            CaseStatView(id: entry.crypto[1].id, price: entry.crypto[1].current_price)
            CaseStatView(id: entry.crypto[2].id, price: entry.crypto[2].current_price)
        }
//        .background(Color(red: 24/255, green: 30/255, blue: 36/255))
    }
}

screenshot-20210506201020.png

Po dodaniu obrazku (Image w HStack) dodaje mi się spacing zarówno w HStack jak i VStack. Jak wywale całe Image, wygląda normalnie:
screenshot-20210506201206.png

Żeby nie było tych spacingów pomiędzy elementami w VStack oraz między Image - Text w HStack muszę spacing ręcznie zdefiniować na 0:

    var body: some View {
        VStack(spacing: 0) {

...

    var body: some View {
        HStack(spacing: 0) {

screenshot-20210506201347.png
Wydaje mi się to nienaturalne. Wiecie co może to powodować?

0
  1. Robisz to źle bo to powinno być jakieś UITableView, a nie coś robione przez ciebie.
  2. Sam problem wygląda mi na zamieszanie z kotwicami.

Prawdopodobnie masz jakieś kotwice, które nadają minimalny rozmiar (wysokość) na cały widok.
Teraz wiersz w zależności, czy ma obrazek czy nie ma, to wymusza swoją wysokość wiersza, która jest za mała by usatysfakcjonować wysokość minimalną.

0
MarekR22 napisał(a):
  1. Robisz to źle bo to powinno być jakieś UITableView, a nie coś robione przez ciebie.
  2. Sam problem wygląda mi na zamieszanie z kotwicami.

Chyba czegoś nie rozumiem. Przecież autor korzysta ze SwiftUI a nie z UIKit.

Co do samego problemu wygląda na to, że VStack i HStack mają takie zachowanie, że spacing równy nil nie jest jednoznaczny i zależy od zawartości.

https://stackoverflow.com/questions/58432787/adding-image-to-hstack-influences-spacing
https://stackoverflow.com/questions/63737766/how-can-i-remove-a-space-when-i-use-image-in-multiple-stacks
https://stackoverflow.com/questions/59449381/swiftui-generates-unwanted-space-around-an-image

0

Fakt nie za bardzo się dobrze wyraziłem, a szybkie googlanie wypluło mi UITableView.
Chodziło mi o to, że zamiast statycznego widoku powinno być coś dynamicznego: znalazłem takie demo.

1

VStack czy HStack nie przeszkadzają w tym, żeby budować dynamiczną treść za pomocą ForEach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1