Ini adalah pengaturan saya: Saya memiliki UIScrollView
tepi dengan leading, top, trialing edge yang disetel ke 0. Di dalamnya saya menambahkan UIStackView
dengan batasan ini:
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
Di dalam tampilan tumpukan saya menambahkan beberapa tampilan.
Masalah saya adalah karena kendala, tampilan pertama yang ditambahkan ke tampilan tumpukan juga akan memiliki tepi terdepan = 0.
Apa cara agar saya bisa menambahkan beberapa padding ke tampilan pertama? Tanpa menyesuaikan batasan tampilan gulir.
ios
swift
uiscrollview
uistackview
Adrian
sumber
sumber
Jawaban:
Solusi yang Anda berikan tidak menambahkan padding untuk tampilan Anda di dalam UIStackView Anda (seperti yang Anda inginkan dalam pertanyaan), tetapi ini menambahkan petunjuk untuk UIStackView.
Solusinya bisa dengan menambahkan UIStackView lain di dalam UIStackView asli Anda dan memberikan arahan ke UIStackVIew baru ini. Kemudian, tambahkan tampilan Anda ke UIStackView baru ini.
Petunjuk, Anda dapat melakukannya sepenuhnya menggunakan Interface Builder. Dengan kata lain, tidak perlu menulis kode untuk itu.
sumber
Jika
isLayoutMarginsRelativeArrangement
properti benar, tampilan tumpukan akan menata tampilan yang diatur relatif terhadap margin tata letaknya.Tapi itu mempengaruhi semua tampilan yang diatur di dalam tampilan tumpukan. Jika Anda ingin padding ini hanya untuk satu tampilan tersusun, Anda perlu menggunakan nested
UIStackView
sumber
isLayoutMarginsRelativeArrangement
adalah getter, setter islayoutMarginsRelativeArrangement
. Saya tidak bisa mengedit jawabannyalayoutMarginsRelativeArrangement
. Dokumentasi resmi: developer.apple.com/reference/uikit/uistackview/…stackView.layoutMargins = UIEdgeInsetsMake(0, 20, 0, 20); [stackView setLayoutMarginsRelativeArrangement:YES];
Saya telah menemukan bahwa batasan tidak berfungsi di dalam Stack View, atau terlihat agak aneh.
(Seperti jika saya menambahkan batasan leading / trailing ke yang dipilih pada image stackview, yang menambahkan mengarah ke collectionview juga, tetapi tidak menambahkan trailing; dan pasti konflik).
Untuk mengatur margin tata letak untuk semua tampilan di dalam stackview, pilih:
Stack View > Size Inspector > Layout Margins > Fixed
Catatan:
"Fixed"
opsi sebelumnya disebut"Explicit"
, seperti yang terlihat di tangkapan layar.Kemudian tambahkan padding Anda:
sumber
Apa yang berhasil bagi saya adalah menambahkan ke tampilan tumpukan UIView lain yang hanya spacer (bekerja setidaknya dengan stackView.distribution = .Fill):
sumber
swift 3: Anda hanya perlu mengatur offset dengan:
Pastikan batasan ini ditetapkan setelah Anda
parentView.addArrangdSubView(firstView)
sumber
Jika Anda hanya membutuhkan padding terdepan, maka Anda dapat mengatur Alignment tampilan tumpukan ke "Trailing" dan kemudian Anda akan bebas menentukan Batasan utama yang unik pada setiap subview yang ada di dalamnya.
Sebagai bonus, Anda juga dapat mengatur kesejajaran tampilan tumpukan ke "Tengah" dan kemudian Anda dapat menggunakan Batasan Utama dan / atau Trailing untuk memberikan padding tersendiri pada setiap item di kedua sisi.
sumber
Pertanyaan ini sudah memiliki jawaban yang bagus, Satu saran, gunakan
spacing
properti untuk mengatur jarak antar tampilan. Untuk tampilan pertama dan terakhir, mungkin ada dua opsi, baik setel insets sebagai @tolpp disarankan atau tambahkan batasan yang melekat pada induk (stackview) dengan konstanta untuk menambahkan pengisi.sumber
Solusinya adalah memiliki tampilan reguler dalam tampilan tumpukan untuk menampung tampilan apa pun yang ingin Anda tambahkan batasan, lalu Anda dapat menambahkan batasan untuk item Anda yang relatif terhadap tampilan dalam tampilan tumpukan. Dengan begitu, tampilan asli Anda dapat memiliki batasan awal dan akhir dalam tampilan tumpukan.
Ini dapat dilakukan di pembuat antarmuka dan secara terprogram.
sumber
Apa yang kami lakukan adalah menambahkan komponen transparan (mis., UIButton / UIView) sebagai turunan pertama dan terakhir dari UIStackView. Kemudian atur membatasi lebar anak-anak yang tidak terlihat ini untuk menyesuaikan bantalan.
sumber
Tampaknya solusinya cukup sederhana. Dari pada:
Saya baru saja menulis:
sumber