HStack 中的 SwiftUI 按钮宽度不正确

Posted

技术标签:

【中文标题】HStack 中的 SwiftUI 按钮宽度不正确【英文标题】:SwiftUI Buttons in HStack not correct width 【发布时间】:2020-10-25 18:02:10 【问题描述】:

我在创建视图时遇到了一些问题。

内容视图

VStack
    Capsule()
        .fill(Color.white)
        .frame(width: 50, height: 5)
        .padding(.top)
        .padding(.bottom,5)
    
    Text("Hello world")
        .font(.title)
    //Time
    ScrollView(.horizontal)
        HStack(spacing: 0)
            Button(action: 
                
            , label: 
                Text("First")
            ).buttonStyle(TimeframeButtonStyle())
            Button(action: 
                
            , label: 
                Text("Second")
            ).buttonStyle(TimeframeButtonStyle())
            Button(action: 
                
            , label: 
                Text("Thirdiary")
            ).buttonStyle(TimeframeButtonStyle())
    
        .frame(height: 100)
        
    
    //Type
    HStack
        
    

按钮样式

struct TimeframeButtonStyle: ButtonStyle 
    func makeBody(configuration: Configuration) -> some View 
        configuration.label
            .frame(maxWidth: .infinity)
            .foregroundColor(.red)
            .lineLimit(1)
            .font(.title)
            .overlay(RoundedRectangle(cornerRadius: 25.0).stroke(Color.red, lineWidth: 1))
            
            .padding(.horizontal, 20)
            
    

如您所见,按钮位于滚动视图中,然后包含 HStack。 问题是按钮试图适应同一屏幕。

我正在寻找的是如何使按钮成为自然大小?

FixedSize 创建了这个,这使得标签太靠近边框

【问题讨论】:

【参考方案1】:

如何使按钮自然大小?

你可以试试fixedSize():

Button(action: 
    
, label: 
    Text("First")
)
.buttonStyle(TimeframeButtonStyle())
.fixedSize()

【讨论】:

感谢您的回答帕韦洛。我已经尝试过了,它会导致标签出现一些问题。已更新我的问题以包含 fixedSize 的结果 @Pr0tonion 您可以将.padding() 应用到Text

以上是关于HStack 中的 SwiftUI 按钮宽度不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中嵌入 ForEach 的 HStack 中设置相对宽度?

如何在溢出屏幕的 SwiftUI 中制作无限宽度的视图?

SwiftUI - HStack NavigationLink“按钮”分别向两个元素添加按钮样式?

HStack 中的 SwiftUI 元素具有不同的高度

在 SwiftUI 中对齐 HStack,但大小不相等

SwiftUI如何制作圆角和屏幕底部上方的hstack?