Почему мой объект стиля Button работает только с текстом внутри кнопки, а не со всей кнопкой? - PullRequest
1 голос
/ 24 апреля 2020

У меня ниже ButtonStyle объекта, который я буду использовать sh, чтобы использовать его при нажатии Button. Однако когда я вызываю его на моем Button, эффект виден только для текста внутри кнопки, а не для всего Button в целом. Я попытался назвать это снаружи, но безрезультатно. Может кто-нибудь объяснить мне, как я могу исправить свою ошибку?

Button(action: {

    }) {
        Text("Button")
            .foregroundColor(.white)
    }.background(Color.red)
     .buttonStyle(ScaleButtonStyle())


struct ScaleButtonStyle: ButtonStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .scaleEffect(configuration.isPressed ? 5 : 1)
    }
}

РЕДАКТИРОВАТЬ:

Button(action: {}) {
            Text("Button")
                .fontWeight(.semibold)
                .foregroundColor(.white)
                .font(.title)
        }
        .buttonStyle(ScaleButtonStyle(bgColor: Color.red))
        .frame(width: geo.size.width*0.8, height: geo.size.height*0.1, alignment: .center)
        .background(Color.red)
        .clipShape(Rectangle())


struct ScaleButtonStyle: ButtonStyle {
 let bgColor: Color

 func makeBody(configuration: Self.Configuration) -> some View {
    configuration.label
        .background(bgColor)
        .scaleEffect(configuration.isPressed ? 5 : 1)
 }
}

1 Ответ

1 голос
/ 25 апреля 2020

Решение состоит в том, чтобы сделать фон частью стиля кнопки, как показано ниже.

Протестировано с Xcode 11.4 / iOS 13.4

enter image description here

struct ScaleButtonStyle: ButtonStyle {
    let bgColor: Color
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .background(bgColor)
            .scaleEffect(configuration.isPressed ? 5 : 1)
    }
}

struct TestScaleButtonStyle: View {
    var body: some View {
        Button(action: { }) {
            Text("Button")
                .foregroundColor(.white)
        }.buttonStyle(ScaleButtonStyle(bgColor: Color.red))
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...