美文网首页iOS开发 (译文)
(翻译) SwiftUI -- 创建详情页

(翻译) SwiftUI -- 创建详情页

作者: Grabin | 来源:发表于2019-12-14 23:55 被阅读0次



1.png


本文原创作者:Martin Lasek
原文链接:https://medium.com/@martinlasek/swiftui-detail-view-44772246fa2a



在这个教程中,我将会展现给你知道创建一个详情页面,并且把数据传给它用于显示是多么的简单✨。

2.gif

这次的教程是跟上一个教程连起来的 (翻译) SwiftUI -- 理解 Binding,你可以先去看之前的教程再回来接着继续阅读,或者你不介意也可以跳过上一个教程,继续下去😊。


索引
  1. 创建一个详情页面(Detail View)
  2. 实现(使用)你的详情页面


1. 创建一个详情页面(Detail View)



如果你跳过了上一个教程,那么你可以从 理解 Binding CodeBase下载上个教程的代码下来,因为这个教程是基于之前的代码继续学习的。

我们的第一步是添加一些 pokemon 的图片到我们的项目中:

3.png

可以从这里去找到图片,确保每个图片名能和它们的名字对应起来。

接下来的一步是新建一个 SwiftUI View,并把它命名为 PokemonDetail

4.png

我们将会像下面一样给PokemonDetail view 添加一个图片和文本:

import SwiftUI
struct PokemonDetail: View {
  let pokemon: Pokemon
  var body: some View {
    VStack {
      Image(pokemon.name.lowercased())
      Text(pokemon.type)
      Spacer()
    }
  }
}
#if DEBUG
struct PokemonDetail_Previews: PreviewProvider {
  static var previews: some View {
    PokemonDetail(
      pokemon: Pokemon(
        id: 0,
        name: "Charmander",
        type: "Fire",
        color: .red
      )
    )
  }
}
#endif

如你所见,我们使用 pokemonname在获取对应的图片。如果你在这之前没有见过 Spacer,这是它很荣幸能见到你的一刻!Spacer的作用是填满所有剩余的空间,使整个 view 往上推,这样我们最终会得到这样的:

5.png

我们可以添加一些风格来让我们的 view 变得更好看:

import SwiftUI
struct PokemonDetail: View {
  let pokemon: Pokemon
  var body: some View {
    VStack {
      Image(pokemon.name.lowercased())
        .resizable()
        .frame(width: 200, height: 200)
      Text(pokemon.type)
        .font(.title)
        .foregroundColor(pokemon.color)
      Spacer()
    }.navigationBarTitle(Text(pokemon.name), displayMode: .inline)
  }
}
#if DEBUG
struct PokemonDetail_Previews: PreviewProvider {
  static var previews: some View {
    PokemonDetail(
      pokemon: Pokemon(
        id: 0,
        name: "Charmander",
        type: "Fire",
        color: .red
      )
    )
  }
}
#endif

我们用resizable()告诉Image, 让它调整大小,以适应它的父视图。这样在默认的情况下是填满了整个父视图,除非我们设置了frame, 让它在这个范围内使用图片。这里设置了.frame(width: 200, height: 200)

对于 Text,我们想要它稍微大一些,我们可以设置它的 size,比如 .caption / .body / .subheading / .title 等等。

到这里你应该看到一个引人注目的 PokemonDetail 视图,像这样:

6.png

2. 实现(使用)你的详情页面

准备好使用我们的PokemonDetail View 了吗?让我们在ContentView 添加如下代码:

import SwiftUI
struct Pokemon: Identifiable {
  ...
}
struct ContentView : View {
  @State var pokemonList = [ ... ]
  @State var showDetails = true
var body: some View {
    NavigationView {
      List(pokemonList) { pokemon in
        NavigationLink(destination: PokemonDetail(pokemon: pokemon) {
          HStack {
            Text(pokemon.name)
            if self.showDetails {
               Text(pokemon.type).foregroundColor(pokemon.color)
            }
          }
        }
      }
        .navigationBarTitle(Text("Pokemon"))
        .navigationBarItems(
          leading: ToggleTextButton(isOn: $showDetails),
          trailing: Button(
            action: addPokemon,
            label: { Text("Add") }
          )
        )
      }
    }
  func addPokemon() {
    ...
  }
}

让我们运行代码,看看所有的事情是如何神奇的出现的✨ 》》

7.gif

相关文章

网友评论

    本文标题:(翻译) SwiftUI -- 创建详情页

    本文链接:https://www.haomeiwen.com/subject/kwahnctx.html