如何在swift ui中调整形状以适应文本视图的长度和宽度

irlmq6kh  于 2022-11-21  发布在  Swift
关注(0)|答案(3)|浏览(124)

ZStack {
    RoundedRectangle(cornerRadius: 8)
        .foregroundColor(.red)
        .scaledToFit() //.frame(width: 200, height: 25)
        
    HStack {
        Image(systemName: "tag.fill")
            .foregroundColor(.white)
            
        Text("Tickets Not Available")
            .font(.headline)
            .foregroundColor(.white)
            .fixedSize(horizontal: true, vertical: false)
    }
}
.scaledToFit()

正如你所看到的,我的视图被放置在一个zstack中,这样圆角矩形就可以作为文本视图的背景。我尝试了很多不同的方法,比如把.scaledtofit放在哪里,但每次都得到了奇怪的结果。

ws51t4hk

ws51t4hk1#

这是你想要的吗(注意Image.resizable):

import SwiftUI

struct ContentView: View {

var body: some View {
    ZStack{
        RoundedRectangle(cornerRadius: 8).foregroundColor(.blue)
        HStack{
            Image(systemName: "tag.fill").resizable().padding(4).foregroundColor(.white).scaledToFit()
            Text("Get Tickets").font(.headline).foregroundColor(.white)
        }
    }.fixedSize()
}
jchrr9hc

jchrr9hc2#

这个问题有点不清楚,但是如果您尝试在文本视图中调整形状,并且您可以不使用scaledToFit,则代码应该是:

RoundedRectangle(cornerRadius: 8).foregroundColor(.red).frame(width: textView.width, height: textView.height)

希望这能有所帮助,也希望你不需要使用scaledToFit。如果你在评论中告诉我的话。

2w3kk1z5

2w3kk1z53#

在这里,一个可重用的ButtonStyle可能会有帮助。使用.background修饰符代替ZStack,有助于保持Button内容的大小:

struct RoundedButtonStyle: ButtonStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        ZStack {
            configuration.label
                .font(.headline)
                .padding()
                .background(RoundedRectangle(cornerRadius: 8).foregroundColor(Color.blue))
        }
    }
}

用法示例:

Button(
    action: {
        print("Button Tapped")
    },
    label: {
        HStack {
            Image(systemName: "tag.fill")
            Text("Tickets")
        }
    }
)
.buttonStyle(RoundedButtonStyle())

相关问题