SwiftUI iOS14以降はLabel、それ以前はImage+Text

iOS13を救うには#availableを書く。
共通化すれば綺麗。
今回の場合はViewが違うので良いが、Modifiersを#availableで囲いたい時がある。

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Button(action: {
    self.save()
}, label: {
    if #available(iOS 14.0, *) {
        Label("Save", systemImage: "tray.and.arrow.down")
            .font(.title)
    }
    else {
        HStack {
            Image(systemName: "tray.and.arrow.down")
                .font(.title)
            Text("Save")
                .font(.title)
        }
    }
})

共通化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import SwiftUI
 
struct ButtonLabel: View {
    let action: () -> Void
    let message: String
    let systemImage: String
 
    var body: some View {
        Button(action: self.action
               , label: {
            if #available(iOS 14.0, *) {
                Label(NSLocalizedString(self.message, comment: ""),
                      systemImage: self.systemImage)
            }
            else {
                HStack {
                    Image(systemName: self.systemImage)
                    Text(NSLocalizedString(self.message, comment: ""))
                }
            }
        })
    }
}

SwiftSwift,SwiftUI

Posted by shi-n