SwiftUI-将Button的内容向左对齐

时间:2019-08-16 05:12:24

标签: swift swiftui

我的设计看起来像这样:

enter image description here

当我将其包装在Button中时,“图像”和“ HOME”文本将向中心移动:

enter image description here

我正在尝试使内容向左对齐,但是遇到了麻烦。这是组成此组件的代码。

struct HomeSection: View {
var body: some View {
    Button(action: {

    }) {
        Group {
            Spacer().frame(width: 0, height: 36.0, alignment: .topLeading)
            HStack {
                Image("home")
                    .resizable()
                    .frame(width: 24, height: 24)
                    .foregroundColor(.navigationTextGrey)

                Text("HOME")
                    .bold()
                    .font(.system(size: 17.0))
                    .foregroundColor(Color.navigationTextGrey)
                    .padding(.leading, 4.0)
            }
            Rectangle()
                .fill(Color.navigationTextGrey)
                .frame(width: UIScreen.main.bounds.width - 60, height: 1)
                .padding(.top, 6.0)
        }
    }
}
}

4 个答案:

答案 0 :(得分:2)

您可以在HStack上添加垫片,并填充以使房屋图像与矩形对齐。

    var body: some View {
        Button(action: {
        }) {
            Group {
                Spacer().frame(width: 0, height: 36.0, alignment: .topLeading)
                HStack {
                    Image("home")
                        .resizable()
                        .frame(width: 24, height: 24)
                        .foregroundColor(.navigationTextGrey)
                        .padding(.leading, 30.0)
                    Text("HOME")
                        .bold()
                        .font(.system(size: 17.0))
                        .foregroundColor(Color.navigationTextGrey)
                        .padding(.leading, 4.0)
                    Spacer()
                }
                Rectangle()
                    .fill(Color.navigationTextGrey)
                    .frame(width: UIScreen.main.bounds.width - 60, height: 1)
                    .padding(.top, 6.0)
            }
        }
    }

这是最终结果:enter image description here

此外,如果您想稍微清理一下代码,则有一个divider view可以代替矩形,而代替矩形

Divider()
       .padding([.leading, .trailing], 30)

答案 1 :(得分:2)

是的,可以清理很多。

var body: some View {
    Button(action: {
    }) {
        VStack(spacing: 6) {
            HStack(spacing: 4) {
                Image("home")
                    .resizable()
                    .frame(width: 24, height: 24)
                Text("HOME")
                    .bold()
                    .font(.system(size: 17.0))
                Spacer()
            }
            Divider()
        }
    }
    .foregroundColor(.navigationTextGrey)
    .padding([.leading, .trailing], 30)
}

答案 2 :(得分:1)

您应该尝试为HStack添加一个垫片和对齐方式

        HStack() {
            Image("home")
                .resizable()
                .frame(width: 24, height: 24)
                .foregroundColor(.navigationTextGrey)

            Text("HOME")
                .bold()
                .font(.system(size: 17.0))
                .foregroundColor(Color.navigationTextGrey)
                .padding(.leading, 4.0)

            Spacer()
            }

答案 3 :(得分:1)

尝试使用 maxWidth = .infinity 的间隔

Spacer().frame(maxWidth:.infinity)