telah masuk ke pembayaran otomatis baru-baru ini dan saya terjebak pada apa yang tampaknya seperti contoh masalah yang sangat sepele. Saya memiliki pandangan yang ingin saya duduki di bagian atas layar, dan mengambil setengah dari tinggi layar. Sederhana sebelum tata letak otomatis - cukup tempelkan di tempatnya dan beri tahu untuk meluaskan secara vertikal saat tampilan super berubah ukuran.
Sekarang, saya tidak bisa seumur hidup saya melihat bagaimana melakukannya. Inilah yang saya dapatkan saat mencoba menyiapkan ini:
Batasan ruang bawah disetel ke "sama dengan 284", yang mutlak dan sama sekali tidak berguna bagi saya ketika saya mengubah ke tata letak iPhone4, karena itu membuat ruang 284 poin di bagian bawah layar, dan memperkecil tampilan menjadi tidak lagi setengah ukuran layar. Dan tidak ada cara untuk menyetel batasan tersebut agar sama dengan beberapa pecahan dari ketinggian tampilan lainnya ..
Setelah berjuang beberapa saat, satu-satunya cara yang dapat saya pikirkan untuk melakukan ini adalah dengan memperkenalkan tampilan lain di bawah tampilan ini, menyematkan ketinggian mereka secara merata, meminta mereka duduk di atas dan di bawah satu sama lain, dan kemudian mengatur tampilan kedua (bawah) agar tidak terlihat. .. yang sepertinya agak jelek!
Apakah saya melewatkan sesuatu yang jelas? ..
sumber
Jawaban:
Ini sekarang dimungkinkan di IB sejak [setidaknya] Xcode 5.1.1. Meskipun saya butuh waktu untuk mengetahui bahwa ini sebenarnya sangat sederhana:
Pertama buat batasan perataan atas dasar (Anda juga perlu mengatur batasan bawah, kiri, dan kanan, seperti biasa). Kemudian pilih batasan dan arahkan ke inspektur atribut :
Kemudian Anda dapat mengatur pengali. Jika Anda menginginkannya 50% dari tampilan super biarkan di
1
, karena sejajar per pusat super. Ini juga cara yang bagus untuk membuat tampilan yang merupakan persentase lain juga (seperti 25% dari tampilan super)sumber
First Item
iniView.Top
tidakView.Center Y
. Jika tidak, ya itu hanya akan memusatkannya. Anda juga perlu memastikan pembatas lain disetel dengan benar untuk menangani tepi tampilan lainnya.Solusi papan cerita di mana Anda dapat mengatur rasio yang tepat antara tampilan apa pun:
Sekarang:
KEUNTUNGAN!!!
PS Perhatikan juga bahwa metode ini bekerja dengan tampilan pada tingkat bersarang yang berbeda dan (jelas) berlaku untuk lebar
PPS terkadang mungkin berguna untuk "membalikkan item pertama dan kedua" dari batasan atau menyetel pengganda terbalik (misalnya 2, bukan 0,5) (tetapi metode ini tidak membantu jika Anda tidak memahami bagaimana tampilan terkait satu sama lain).
sumber
Setelah beberapa waktu, saya menemukan yang berikut ini.
Saya mencatatnya sebagai jawaban tetapi itu tidak terlalu memuaskan, karena mengasumsikan Anda tidak dapat benar-benar melakukan ini di Interface Builder, tetapi batasan yang benar dapat ditambahkan dalam kode setelahnya sebagai:
- (void) viewWillAppear:(BOOL)animated { NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:upperview attribute:NSLayoutAttributeHeight relatedBy:0 toItem:self.view attribute:NSLayoutAttributeHeight multiplier:.5 constant:0]; [self.view addConstraint:constraint]; }
Pada dasarnya, ini menetapkan pengali 0,5 terhadap ketinggian tampilan sendiri, yang bekerja pada tampilan atas. Saya harus menetapkan prioritas batasan ruang vertikal bawah di IB menjadi lebih rendah dari 1000 untuk menghindari sekumpulan pesan runtime tentang melanggar batasan juga.
Jadi, jika ada yang bisa menunjukkan bagaimana melakukan ini di Interface Builder, itu akan menjawab pertanyaan saya dengan lebih baik, jika tidak, saya rasa ini sebagus yang didapat (untuk saat ini) ???
sumber
Sedikit lebih mudah dan lebih lurus ke depan daripada metode daripada jawaban Fyodor Volchyok. -Tahan tombol kontrol dan klik subview. -Masih menahan tombol perintah, seret kursor ke superview lalu klik superview. -Pilih "Rasio Aspek".
-Lalu klik Size Inspector. -Kemudian klik dua kali pada batasan.
-Pastikan "tinggi" dipilih untuk kedua item.
-Lalu ubah "Pengganda" menjadi 0,5 untuk setengah layar, atau bagian mana pun dari tampilan super yang Anda inginkan.
sumber
Ada juga kemungkinan lain dalam kode jika Anda memiliki 2 tampilan yang keduanya harus memiliki ketinggian yang sama: cukup atur tinggi view2 ke ketinggian view1 (trik di sini adalah tidak mengatur tinggi view1 secara eksplisit).
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topLayoutGuide]-0-[_view1]-0-[_view2(==_view1)]-0-[bottomLayoutGuide]" options:0 metrics:nil views:viewsDict]];
sumber
Versi cepat dari jawaban Mete:
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. upperView.translatesAutoresizingMaskIntoConstraints = false var constraint = NSLayoutConstraint(item: upperView, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0) self.view.addConstraint(constraint) constraint = NSLayoutConstraint(item: upperView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.height, multiplier: 0.5, constant: 0) self.view.addConstraint(constraint) constraint = NSLayoutConstraint(item: upperView, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.leading, multiplier: 1, constant: 0) self.view.addConstraint(constraint) constraint = NSLayoutConstraint(item: upperView, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: 0) self.view.addConstraint(constraint) }
sumber