💨
SwiftUIでスタイルの統一
SwiftUIでのスタイルの設定
iOS/macOSではStyles
を使ってボタン・テキストの見た目を一括で変更することができます。
単純なスタイルの指定
例としてButtonStyle
があります。これを使うことでボタンの見た目を変えることができます。
struct CapsuleButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.padding()
.background(Color.blue) //背景色
.foregroundColor(.white) //文字色
.font(.body.bold()) //フォントサイズ・スタイル
.clipShape(Capsule()) //背景の形
.scaleEffect(configuration.isPressed ? 0.95 : 1) //ボタンが押された時のエフェクト
.animation(.easeOut(duration: 0.2)) //エフェクトのアニメーション
}
}
struct ContentView: View {
var body: some View {
Button("Capsule", action: { })
.buttonStyle(CapsuleButtonStyle())
}
}
結果
スタイルの統一方法
Buttonが複数ある場合、全てのButtonに対してStyleを適用すれば良いと考えられます。
struct ContentView: View {
var body: some View {
VStack {
Button("Capsule1", action: { })
.buttonStyle(CapsuleButtonStyle())
Button("Capsule2", action: { })
.buttonStyle(CapsuleButtonStyle())
Button("Capsule3", action: { })
.buttonStyle(CapsuleButtonStyle())
}
}
}
しかし、この方法ではコードの量が多くなってしまいます。
そこで以下のように変更します。
struct ContentView: View {
var body: some View {
VStack {
Button("Capsule1", action: { })
Button("Capsule2", action: { })
Button("Capsule3", action: { })
}.buttonStyle(CapsuleButtonStyle())
}
}
ポイントは、親要素のVStack
に対してButtonStyle
を適用していることです。
子要素の全てにStyleが適用されます。
統一に便利なスタイル
ここまでButtonStyle
を中心に一括でStyleを適用する方法を解説していきました。
他にもStyleの統一に便利なものがいくつもあります。
下記はその例です。
- TextFieldStyle
- ButtonStyle
- ToggleStyle
- LabelStyle
他にもStyleはありますが、1つのアプリでは実装する要素の数が少ないので割愛しました。
参考
Discussion