似乎无法在 text() 和 textfield() 之间使用 Spacer()

Bon*_*teq 2 swiftui

当我在 HStack 中并尝试在 Text 和 Textfield 视图之间创建空间时,我似乎无法使用 Spacer() 函数。间隔器用于间隔视图的其他区域,但每当我尝试在这两个元素之间间隔时,它就不起作用。

这是我正在使用的代码:

    VStack(alignment: .leading, spacing: 0) {
        Rectangle()
            .frame(height: 2, alignment: .top)
            .foregroundColor(Color("grey2"))
        Text("Tickets")
            .kerning(0.5)
            .scaledFont(name: "Gotham Medium", size: 18)
            .foregroundColor(Color("grey4"))
            .padding(.horizontal)
            .padding(.bottom, 3)
            .padding(.top, 35)
        Rectangle()
            .frame(height: 2, alignment: .top)
            .foregroundColor(Color("grey2"))

        HStack {
            Text("Ticket URL")
                .kerning(0.5)
                .scaledFont(name: "Gotham Book", size: 16)
                .foregroundColor(Color("spaceblack"))

            Spacer()

            TextField("Enter URL", text: $url)
        }
        .background(Color.blue)
        .padding()

        Rectangle()
            .frame(height: 2, alignment: .top)
            .foregroundColor(Color("grey2"))
    }
    .frame(maxWidth: .infinity)
    .background(Color.red)
Run Code Online (Sandbox Code Playgroud)

Muh*_*mah 6

尝试添加.fixedSize()修饰符到你的TextField

   TextField("Enter URL", text: $url)
       .fixedSize()
Run Code Online (Sandbox Code Playgroud)

frame或者像这样设置

   TextField("Enter URL", text: $url)
       .frame(width:200, height:50, alignment:.leading)
Run Code Online (Sandbox Code Playgroud)

问题是 和TextFieldSpacer()占用所有可用空间,并且在这种情况下TextField获得优先权;但是,如果您为其指定固定大小或框架,则TextField不会拉伸以占据完整空间,而是会被固定。

.fixedSize可以让你TextField从小处开始,但最终它会继续拉伸你写的更多文本,这可能会导致不必要的行为。

.frame会将您的尺寸固定为提供的宽度,因此不会有任何拉伸,并且Spacer将优先占用可用空间。