#ios #swift #swiftui
#iOS #swift #swiftui
Вопрос:
Button
Для получения нужного стиля требуется пара наложений (обводка, тень и т. Д.).
Однако эти наложения затем переходят к Button
тексту.
Вид:
struct ProfileTest: View {
var body: some View {
Button(action: {
}){
HStack {
Text("OFFLINE")
.font(.custom("Seravek-Bold", size: 25))
.fontWeight(.bold)
.foregroundColor(Color.blue)
}
}.padding(EdgeInsets(top: 12, leading: 15, bottom: 12, trailing: 15))
.cornerRadius(50)
.overlay(
RoundedRectangle(cornerRadius: 50)
.stroke(Color.black, lineWidth: 1)
)
.overlay(
RoundedRectangle(cornerRadius: 50)
.fill(Color.red)
.shadow(color: Color.black.opacity(1), radius: 1)
)
.opacity(0.7)
.padding(.bottom, 100)
.padding(.bottom, 20)
}
}
Как я могу настроить свой вид так, чтобы синий текст отображался над фоном?
Ответ №1:
Вы можете использовать пользовательский ButtonStyle
.
- Создайте свою собственную фигуру и добавьте
.overlay(configuration.label)
поверх нее:
struct CustomButtonStyle: ButtonStyle {
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.hidden()
.padding(EdgeInsets(top: 12, leading: 15, bottom: 12, trailing: 15))
.cornerRadius(50)
.overlay(
RoundedRectangle(cornerRadius: 50)
.stroke(Color.black, lineWidth: 1)
)
.overlay(
RoundedRectangle(cornerRadius: 50)
.fill(Color.red)
.shadow(color: Color.black.opacity(1), radius: 1)
)
.opacity(0.7)
.overlay(configuration.label)
.padding(.bottom, 100)
.padding(.bottom, 20)
}
}
Вы также можете configuration.isPressed
настроить поведение ярлыка при нажатии кнопки.
- Примените его к своему
Button
:
struct ContentView: View {
var body: some View {
Button(action: {}) {
HStack {
Text("OFFLINE")
.font(.custom("Seravek-Bold", size: 25))
.fontWeight(.bold)
.foregroundColor(Color.blue)
}
}
.buttonStyle(CustomButtonStyle())
}
}
Комментарии:
1. Это заставляет кнопку занимать всю ширину и высоту — есть ли способ управлять этим без настройки фиксированных размеров?
2. Спасибо. Единственным недостатком является то, что он теряет
active
состояние, в котором непрозрачность кнопки уменьшается при ее нажатии. Не уверен, есть ли какой-либо способ решить это с помощью этого метода, хотя3. @Zorgan Вы можете использовать
configuration.isPressed
, чтобы определить, нажата кнопка или нет, а затем действовать соответствующим образом.