4つのトピックに取り組む必要があります。レイアウト、配置、カスタムガイドなどのルールについて学習します。
レイアウトとジオメトリ:はじめに
Layout and geometry: Introduction
SwiftUIでのレイアウトの仕組み
How layout works in SwiftUI
親ビューは子のサイズを提案します。
その情報に基づいて、子供は自分のサイズを選択し、親はその選択を尊重する必要があります。
次に、親が子をその座標空間に配置します。
SwiftUIは背後で4番目のステップを実行します。位置とサイズを浮動小数点数として保存しますが、レンダリングに関しては、SwiftUIはピクセルを最も近い値に丸めるため、グラフィックスは鮮明なままです。
leading
trailing
top異なるビュー間で分割されているビューで作業している場合、これらはまったく機能しません。ユーザーインターフェイスのまったく異なる部分にある2つのビューを同じように配置する必要がある場合。
SwiftUIはalignmentGuide()、まさにこの目的のための修飾子を提供します。これは2つのパラメーターを取ります。変更するガイドと、新しい配置を返すクロージャーです。クロージャーにはViewDimensions、ビューの幅と高さを含むオブジェクトと、さまざまなエッジを読み取る機能が与えられます。
var body: some View { VStack(alignment: .leading) { ForEach(0..<10) { position in Text("Number \(position)") .alignmentGuide(.leading) { _ in CGFloat(position) * -10 } } } .background(Color.red) .frame(width: 400, height: 400) .background(Color.blue) }
カスタム配置ガイドを作成する方法
How to create a custom alignment guide
カスタムレイアウトガイド
custom layout guide.
VerticalAlignment
HorizontalAlignment
// // ContentView.swift // LayoutAndGeometry // // Created by Naoki Abe on 2020/09/13. // Copyright © 2020 Naoki Abe. All rights reserved. // import SwiftUI struct ContentView: View { var body: some View { VStack{ HStack { VStack { Text("@twostraws") Image("picture") .resizable() .frame(width: 64, height: 64) } VStack { Text("Full name:") Text("PAUL HUDSON") .font(.largeTitle) } } HStack(alignment: .midAccountAndName) { VStack { Text("@twostraws") .alignmentGuide(.midAccountAndName) { d in d[VerticalAlignment.center] } Image("picture") .resizable() .frame(width: 64, height: 64) } VStack { Text("Full name:") Text("PAUL HUDSON") .alignmentGuide(.midAccountAndName) { d in d[VerticalAlignment.center] } .font(.largeTitle) } } } } } extension VerticalAlignment { struct MidAccountAndName: AlignmentID { static func defaultValue(in d: ViewDimensions) -> CGFloat { d[.top] } } static let midAccountAndName = VerticalAlignment(MidAccountAndName.self) } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }