Sığdırılacak ölçeği tanımlamıyorsunuz; en boy oranını tarif ediyorsunuz. (Sorunuzu bu bağlamda düzenledim.) Alt görünüm, en boy oranını korurken ve tamamen ebeveyninin içine sığdırırken mümkün olduğunca büyür.
Her neyse, bunu otomatik düzen ile yapabilirsiniz. Tamamen IB'de Xcode 5.1'den itibaren yapabilirsiniz. Bazı görünümlerle başlayalım:
Açık yeşil görünüm 4: 1 en boy oranına sahiptir. Koyu yeşil görünüm 1: 4 en boy oranına sahiptir. Kısıtlamalar ayarlayacağım, böylece mavi görünüm ekranın üst yarısını dolduracak, pembe görünüm ekranın alt yarısını dolduracak ve her yeşil görünüm en boy oranını koruyarak ve bir kap.
İlk olarak, mavi görünümün dört tarafında da kısıtlamalar oluşturacağım. Her kenardaki en yakın komşusuna 0 mesafeyle sabitleyeceğim. Kenar boşluklarını kapattığımdan emin olun:
Ben unutmayın yok henüz çerçeveyi güncelleyin. Kısıtlamaları ayarlarken görünümler arasında yer bırakmayı daha kolay buluyorum ve sadece sabitleri el ile 0 (ya da her neyse) olarak ayarladım.
Sonra, pembe görünümün sol, alt ve sağ kenarlarını en yakın komşusuna sabitliyorum. Üst kenarı zaten mavi görünümün alt kenarı ile sınırlı olduğu için bir üst kenar kısıtlaması ayarlamam gerekmiyor.
Ayrıca pembe ve mavi görünümler arasında eşit yükseklikte bir kısıtlamaya ihtiyacım var. Bu, her birinin ekranın yarısını doldurmasını sağlayacaktır:
Xcode'a şimdi tüm çerçeveleri güncellemesini söylersem, şunu elde ederim:
Yani şimdiye kadar kurduğum kısıtlamalar doğru. Bunu geri alıyorum ve açık yeşil manzara üzerinde çalışmaya başlıyorum.
Açık yeşil görünümü en boyuna sığdırmak beş kısıtlama gerektirir:
- Açık yeşil görünümde zorunlu öncelikli en boy oranı kısıtlaması. Bu kısıtlamayı Xcode 5.1 veya sonraki bir sürümüyle bir xib'de veya film şeridinde oluşturabilirsiniz.
- Açık yeşil görünümün genişliğini, kabının genişliğinden küçük veya ona eşit olacak şekilde sınırlayan gerekli öncelikli bir kısıtlama.
- Açık yeşil görünümün genişliğini, kabının genişliğine eşit olacak şekilde ayarlayan yüksek öncelikli bir kısıtlama.
- Açık yeşil görünümün yüksekliğini, kabının yüksekliğinden küçük veya ona eşit olacak şekilde sınırlayan gerekli öncelikli bir kısıtlama.
- Açık yeşil görünümün yüksekliğini, kabının yüksekliğine eşit olarak ayarlayan yüksek öncelikli bir kısıtlama.
İki genişlik sınırlamasını ele alalım. Açık yeşil görünümün genişliğini belirlemek için tek başına eşit veya daha az kısıtlama yeterli değildir; birçok genişlik kısıtlamaya uyacaktır. Belirsizlik olduğu için, autolayout diğer (yüksek öncelikli ancak zorunlu olmayan) kısıtlamalarda hatayı en aza indiren bir çözüm seçmeye çalışacaktır. Hatayı en aza indirmek, gerekli veya eşit olmayan kısıtlamayı ihlal etmeden genişliği kabın genişliğine olabildiğince yakın yapmak anlamına gelir.
Aynı şey yükseklik kısıtı için de geçerlidir. En boy oranı kısıtlaması da gerekli olduğundan, yalnızca bir eksen boyunca alt görünümün boyutunu en üst düzeye çıkarabilir (kap alt görünümle aynı en boy oranına sahip olmadıkça).
İlk önce en boy oranı kısıtlaması oluşturuyorum:
Sonra konteyner ile eşit genişlik ve yükseklik kısıtlamaları oluşturuyorum:
Ben bu kısıtlamaları daha az veya eşit kısıtlamalar olması gerekir:
Sonra konteyner ile eşit genişlik ve yükseklik kısıtlamaları başka bir set oluşturmak gerekir:
Ve bu yeni kısıtlamaları gerekli öncelikten daha az yapmalıyım:
Son olarak, alt görünümün kapsayıcısında ortalanmasını istediniz, bu yüzden bu kısıtlamaları ayarlayacağım:
Şimdi, test etmek için görünüm denetleyicisini seçeceğim ve Xcode'dan tüm çerçeveleri güncellemesini isteyeceğim. Bu ne olsun:
Hata! Alt görünüm kabını tamamen dolduracak şekilde genişledi. Bunu seçerseniz, ben aslında onun boy oranını muhafaza olduğunu görebilirsiniz, ancak bir aspect- yapıyor dolgu bir aspect- yerine oturması .
Sorun şudur ki, eşit veya daha az bir kısıtlamada, kısıtlamanın her iki ucunda hangi görünümün önemli olduğu ve Xcode beklentimden farklı bir kısıtlama getirmiştir. İki kısıtlamanın her birini seçebilir ve birinci ve ikinci öğelerini tersine çevirebilirim. Bunun yerine, yalnızca alt görünümü seçeceğim ve kısıtlamaları daha büyük veya eşit olacak şekilde değiştireceğim:
Xcode düzeni günceller:
Şimdi aynı şeyleri alttaki koyu yeşil görünüme yapıyorum. En boy oranının 1: 4 olduğundan emin olmalıyım (Xcode, kısıtlamaları olmadığı için garip bir şekilde yeniden boyutlandırıldı). Aynı olduklarından adımları tekrar göstermeyeceğim. İşte sonuç:
Şimdi, kullanılan IB'den farklı bir ekran boyutuna sahip olan iPhone 4S simülatöründe çalıştırabilir ve rotasyonu test edebilirim:
Ve iPhone 6 simülatöründe test edebilirim:
Size kolaylık olması için son storyboard'umu bu özete yükledim .