0Pricing
Swift Academy · Pelajaran

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() ?? 0

Mengukur 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 ?? .infinity

Pemeriksaan 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.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Protocol Layout
  2. Mengukur Subview
  3. Membangun Tata Letak Alur
  4. Cache Tata Letak dan Kinerja
← Kembali ke Swift Academy