SnowSeeker:はじめに
SnowSeeker: Introduction
SwiftUIで2つのサイドバイサイドビューを操作する
Working with two side by side views in SwiftUI
オプションでのalert()およびsheet()の使用
Using alert() and sheet() with optionals
SwiftUIにはアラートとシートを作成する2つの方法があり、これまでは1つしか使用していませんでした。ブール値がtrueになったときにアラートまたはシートを表示するブール値へのバインディングです。
第二の選択肢はそれほど頻繁に使用されませんが、あなたがそれを必要とする数回のために非常に便利です:あなたは、オプションを使用することができIdentifiable、あなたの条件として、オブジェクトを、そのオブジェクトが値を持っている場合、警告またはシートが表示されます。この種類のクロージャーは、条件に使用されたオプションではない値を渡すので、安全に使用できます。
アラートが解除されるとすぐに、SwiftUIはselectedUserに戻りnilます。
import SwiftUI
struct User: Identifiable {
var id = "Taylor Swift"
}
struct ContentView: View {
@State private var selectedUser: User? = nil
@State private var isShowingAlert = false
var body: some View {
Text("Hello, World!")
.onTapGesture {
self.selectedUser = User()
}
.alert(item: $selectedUser) { user in
Alert(title: Text(user.id))
}
}
}
透明なレイアウトコンテナーとしてのグループの使用
Using groups as transparent layout containers
SwiftUIのGroupビューは、10の子ビューの制限を回避するために一般的に使用されますが、別の重要な動作もあります。透明なレイアウトコンテナーとして機能します。つまり、グループ内に一連のビューを作成し、そのグループを異なるスタックにラップして、異なる動作を実現できます。
グループにはレイアウト情報が含まれていないため、3つのテキストフィールドが縦、横、または奥行きのいずれでスタックされるかはわかりません。これは、の透明なレイアウト動作Groupが重要になる場所です。
import SwiftUI
struct UserView: View {
var body: some View {
Group {
Text("Name: Paul")
Text("Country: England")
Text("Pets: Luna, Arya, and Toby")
}
}
}
/*
struct ContentView: View {
@State private var layoutVertically = false
var body: some View {
Group {
if layoutVertically {
VStack {
UserView()
}
} else {
HStack {
UserView()
}
}
}
.onTapGesture {
self.layoutVertically.toggle()
}
}
}
*/
struct ContentView: View {
@Environment(\.horizontalSizeClass) var sizeClass
var body: some View {
Group {
if sizeClass == .compact {
VStack(content: UserView.init)
} else {
HStack(content: UserView.init)
}
/*
if sizeClass == .compact {
VStack {
UserView()
}
} else {
HStack {
UserView()
}
}
*/
}
}
}