在教程的一开始,我们就说过 SwiftUI 是跨平台的,本文主要讲解当开发好基于 iOS 的 App 以后,如何快速实现 watchOS 和 macOS 的跨平台 App。
File > New > Target > watchOS > Watch App for iOS App
。Product Name、Language 和 User Interface
等信息。Activate
。Supports Running Without iOS App Installation
复选框。项目名-Extension
中,这里面有个ContentView.swift
文件。File > New > Target > macOS > App
。Product Name、Language 和 User Interface
等信息。Deployment Target
。以前面提过的天气预报列表为例来看看 SwiftUI 如何实现跨平台 App 开发。
struct ContentView : View {
let titles = ["2019.10.21", "2019.10.22","2019.10.23","2019.10.24","2019.10.25","2019.10.26","2019.10.27"]
let subtitles = ["星期一", "星期二","星期三","星期四","星期五","星期六","星期日"]
let details = ["下雨", "晴天","有雾","多云","阴天","下雪","大风"]
var body: some View {
List(0..<self.titles.count) { item in
HStack {
VStack {
Text(self.titles[item])
.foregroundColor(.orange)
.bold()
.font(.system(.title))
Text(self.subtitles[item])
.foregroundColor(.gray)
.font(.system(.title))
}.padding(.trailing, 50)
Text(self.details[item])
.foregroundColor(.blue)
.font(.system(.largeTitle))
.italic()
}.padding()
}
}
}
如果直接运行 iOS 的代码,虽然不报错但 UI 会显示很难看,所以需要调整一下。
struct ContentView : View {
let titles = ["2019.10.21", "2019.10.22","2019.10.23","2019.10.24","2019.10.25","2019.10.26","2019.10.27"]
let subtitles = ["星期一", "星期二","星期三","星期四","星期五","星期六","星期日"]
let details = ["下雨", "晴天","有雾","多云","阴天","下雪","大风"]
var body: some View {
List(0..<self.titles.count) { item in
HStack {
VStack {
Text(self.titles[item])
.foregroundColor(.orange)
.bold()
.font(.system(.title))
Text(self.subtitles[item])
.foregroundColor(.gray)
.font(.system(.subheadline)) // 修改字体大小
}.padding(.trailing, 5) // 修改边距
Text(self.details[item])
.foregroundColor(.blue)
.font(.system(.largeTitle))
.italic()
}.padding()
}
}
}
如果直接运行 iOS 的代码,虽然不报错但浪费了很多空间,因为默认窗口的大小为width: 480, height: 300
,所以需要调整一下。
struct ContentView : View {
let titles = ["2019.10.21", "2019.10.22","2019.10.23","2019.10.24","2019.10.25","2019.10.26","2019.10.27"]
let subtitles = ["星期一", "星期二","星期三","星期四","星期五","星期六","星期日"]
let details = ["下雨", "晴天","有雾","多云","阴天","下雪","大风"]
var body: some View {
List(0..<self.titles.count) { item in
HStack() { // 全部横向显示
Text(self.titles[item])
.foregroundColor(.orange)
.bold()
.font(.system(size: 30)) // 调整字体
.frame(minWidth: 180, maxWidth: 200) // 设置frame
Text(self.subtitles[item])
.foregroundColor(.gray)
.font(.system(size: 20)) // 调整字体
.frame(minWidth: 80).padding() // 设置frame
Text(self.details[item])
.foregroundColor(.blue)
.font(.system(.largeTitle))
.italic()
.frame(minWidth: 50, maxWidth: 200) // 设置frame
}.padding()
}
}
}