簡體   English   中英

將 UIStackView's.fill alignment 與 SwiftUI VStack 匹配

[英]Match UIStackView's .fill alignment with SwiftUI VStack

我有一個包含 3 個TextVStack 每個都有不同長度的字符串。 我希望VStack的寬度足以容納最寬的Text ,但我也希望所有三個Text水平填充 VStack 。

默認情況下,使用以下代碼:

VStack(spacing: 4.0) {
    ForEach(1..<4) {
        Text(Array<String>(repeating: "word", count: $0).joined(separator: " "))
            .background(Color.gray)
    }
}

我得到:

具有三種不同寬度文本的 VStack

我想:

具有三個相同寬度文本的 VStack

在 UIKit 中,我可以使用垂直UIStackView執行此操作,其alignment屬性設置為.fill VStack沒有.fill alignment。 我看到的建議解決方案是使用.infinitymaxWidth修改堆棧視圖的每個子項(即每個Text )的框架。

我發現的建議是用.frame(maxWidth: .infinity)修改Text 然而,這使得整個VStack擴展到(大概)它的最大大小:

寬 VStack

有沒有辦法讓VStack自然增長到它最寬的孩子的大小,而不是更大,同時使其所有孩子的寬度相同?

只需添加.fixedSize()

struct ContentView: View {
    var body: some View {
    
        VStack(spacing: 4.0) {
            ForEach(1..<4) {
                Text(Array<String>(repeating: "word", count: $0).joined(separator: " "))
                    .frame(maxWidth: .infinity) /// keep the maxWidth
                    .background(Color.gray)
            }
        }
        .fixedSize() /// here!
    }
}

結果:

3 個帶有灰色背景的文本垂直堆疊,所有 3 個灰色背景都具有最大的文本寬度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM