Mengukur Subview
Tanyakan ukuran subview saat tata letak berlangsung.
Mengukur Subview adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Pengukuran Menggerakkan Tata Letak
Sebelum dapat menempatkan anak, Anda harus mengukur mereka. Tata letak SwiftUI adalah negosiasi: induk mengusulkan ukuran, anak merespons, lalu Anda menyelaraskan hasilnya.
Menanyakan Ukuran Sub-Tampilan
Setiap proksi dalam Subviews menjawab sizeThatFits(_:) untuk suatu ProposedViewSize. Proksi tersebut mengembalikan ukuran yang akan digunakan anak berdasarkan usulan itu.
let size = subview.sizeThatFits(.unspecified)Tiga Usulan Pengujian
Untuk mengetahui fleksibilitas anak, uji dengan tiga cara: .zero menunjukkan ukuran minimumnya, .infinity ukuran maksimumnya, dan .unspecified ukuran idealnya.
let minSize = subview.sizeThatFits(.zero)
let maxSize = subview.sizeThatFits(.infinity)
let ideal = subview.sizeThatFits(.unspecified)Mengusulkan Lebar Tertentu
Untuk teks yang membungkus, usulkan lebar tertentu dan biarkan tinggi bernilai nil. Anak akan melaporkan tinggi yang dibutuhkannya pada lebar tersebut.
let proposal = ProposedViewSize(width: 200, height: nil)
let fit = subview.sizeThatFits(proposal)Prioritas layout
Setiap subtampilan menyediakan priority (yang ditetapkan oleh .layoutPriority). Saat ruang terbatas, berikan ukuran ideal kepada elemen turunan dengan prioritas lebih tinggi terlebih dahulu.
for subview in subviews {
let p = subview.priority
// distribute space to higher priority first
}Membaca Nilai Kustom
Subtampilan dapat membawa data bertipe melalui LayoutValueKey. layout membaca subview[MyKey.self] untuk memengaruhi penempatan—misalnya spacing untuk setiap item.
private struct RankKey: LayoutValueKey {
static let defaultValue: Int = 0
}
let rank = subviews[0][RankKey.self]Menetapkan Nilai untuk layout
Sebuah tampilan menetapkan nilai layout-nya dengan modifier layoutValue(key:value:), sehingga elemen turunan dapat menyampaikan petunjuk kepada layout Anda.
Text("Featured").layoutValue(key: RankKey.self, value: 10)Jarak Antar-subtampilan
Subtampilan menyediakan preferensi spacing. Gunakan subview.spacing.distance(to:along:) untuk mendapatkan gap yang direkomendasikan antara dua elemen turunan yang bersebelahan sepanjang suatu sumbu.
let gap = subviews[0].spacing.distance(
to: subviews[1].spacing, along: .horizontal)Mengakumulasikan sizes
layout horizontal menjumlahkan width elemen turunan dan mengambil height terbesar. Mengukur semua elemen turunan terlebih dahulu memungkinkan Anda menghitung ukuran container sebelum menempatkan apa pun.
let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
let totalWidth = sizes.reduce(0) { $0 + $1.width }
let maxHeight = sizes.map(\.height).max() ?? 0Mengukur Ulang Saat Penempatan
Di dalam placeSubviews, Anda harus mengukur ulang (atau menggunakan kembali sizes yang disimpan dalam tembolok) agar posisi sesuai dengan yang Anda laporkan. Pengukuran adalah panggilan proksi yang ringan, bukan perenderan nyata.
func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
for s in subviews {
let size = s.sizeThatFits(.unspecified)
// use size to position s
_ = size
}
}Mematuhi Usulan Induk
Selalu patuhi usulan yang Anda terima. Jika induk mengusulkan fixed width, tata elemen turunan di dalamnya; jangan diam-diam membiarkan luapan, karena layout akan terpotong.
let containerWidth = proposal.width ?? .infinityPemeriksaan Singkat: Pengukuran
Uji pemahaman Anda tentang pengukuran subtampilan.
Ringkasan: Mengukur Subtampilan
Pengukuran adalah inti dari layout kustom. Periksa elemen turunan dengan .zero, .infinity, dan .unspecified untuk mengetahui ukuran minimum, max, dan ideal, ajukan width konkret untuk content yang membungkus, serta hormati prioritas layout dan preferensi spacing.
Nilai kustom LayoutValueKey memungkinkan elemen turunan menyampaikan petunjuk. Lakukan pengukuran secara konsisten dalam kedua metode protokol agar ukuran yang dilaporkan dan penempatan selalu sesuai.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengukur Subview” gratis?
Ya — teks lengkap “Mengukur Subview” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengukur Subview”?
Tanyakan ukuran subview saat tata letak berlangsung. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mengukur Subview” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.