CustomButtonStyle оформляет label кнопки; модификатор на VStack применяется к вложенной Button. При нажатии выполнится action и напечатается Tapped.
struct CustomButtonStyleView: View {
CustomButtonStyle оформляет label кнопки; модификатор на VStack применяется к вложенной Button. При нажатии выполнится action и напечатается Tapped.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
struct CustomButtonStyleView: View { var body: some View { VStack { Button("Button") { print("Tapped") } } .buttonStyle(CustomButtonStyle()) } }
private struct CustomButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .padding() .foregroundColor(.white) .frame(maxWidth: .infinity) .background(Color.red) .clipShape(RoundedRectangle(cornerRadius: 8)) } }
Ответ
CustomButtonStyle оформляет label кнопки; модификатор на VStack применяется к вложенной Button. При нажатии выполнится action и напечатается Tapped.
Кнопка получает padding, белый текст, максимально доступную ширину, красный фон и скругление. Порядок модификаторов важен: фон применяется после frame, поэтому покрывает расширенную область.
Сейчас configuration.isPressed не используется, поэтому стиль не задаёт отдельного визуального состояния нажатия. Добавьте изменение opacity или scaleEffect с учётом доступности; для disabled-состояния нужна согласованная визуальная политика. ButtonStyle меняет представление, но не заменяет бизнес-действие кнопки и не должен запускать его из makeBody.