gerçekten burada sadece iki şey vardır dinamik düzenler. Burada ele alacağımız bir numara, ekran rotasyonuydu. Bir ekran döndürüldüğünde (veya başka bir şekilde yeniden boyutlandırıldığında), ekranın alt görünümleri büyük olasılıkla yeni boyutlu süper görüntüde yanlış bir frame
(konum ve boyut) tutar. Bunu ele almak için, Apple bir alt görünümü belirli bir şekilde ele almak için süper görüntüyü söyleyen bir dizi sayısız özelliği (Autoresizing Masks
olarak adlandırılır) tanıttı. Bunlar:
Esnek genişliği için özel bir avantaj sağlar mevcut tam genişlik/yükseklik
Esnek başlangıç / bitiş/Üst/Alt alan, genişletmek için bir subview neden/Yükseklik, değişken ve benzeri
Görünüm, bu enum
özelliklerinin herhangi bir bileşimini içerebilir. Bu, diğer eksikliklerin yanı sıra, diğer kardeş görüşlerine göre bir görüşün nasıl düzenlenmesi gerektiği ile ilgili bir kural koymadığı için yetersiz kalmıştır. Ayrıca, yönlendirme değişikliklerine ilişkin görünümleri manuel olarak yeniden boyutlandırmak için çok fazla kodlama gerekiyordu.
Burada, AutoLayout resmi girdiği yer. Apple, constraints
temelinde çalışan bir çerçeve oluşturdu. Görünümler ve görünümler arasında uygulanabilecek kurallar, bir görünümün değişken ekran boyutlarında nasıl boyutlandırılacağını belirler. Bu kısıtlamalar NSLayoutConstraint
adlı bir sınıf olarak yapılandırılmıştır ve bu sınıfın her örneği (kısıtlama) aşağıdaki önemli özelliklere sahip olan:
- madde (görünüm) kısıtlama bakış
- özelliği uygulandığı (yükseklik, genişlik, bu yüzden, kenarı arka kenar ve) kısıtlaması
- ilgili olduğu
- ikinci ürünün (kardeş veya bir alt veya bir üst görünüm) için geçerli olduğu, ikinci öğenin özelik
- Çarpan üzerinde çarpan o kısıtlama: oran tabanlı kısıtlamaları belirtmek için kullanışlıdır
- Kısıtlamanın bir değeri (veya
constant
): ilginç bir şekilde, bir kısıtlamanın, örneğinden sonra değiştirilebilen tek özelliği.
bir NSLayoutConstraint
basit bir örnek, prosaically belirtilmedikçe: a görünümün genişliği 60% ile arttırılabilecek Superview genişliğinin yarısı olacaktır.
AutoLayout tabanlı UI'niz, bu tür kısıtlamalardan oluşur ve bunların tümü, açık ve çakışan bir UI Düzenini ifade etmek için birlikte çalışacaktır.
Şimdi hepsi iş yapar AutoLayout motoru, böyle yönelim değişikliği gibi değişiklikler ekranda gerçekleşen kendini otomatik olarak (düzen) görüşlerini yeniden boyutlandırmak amacıyla gerektiğinde bu tür layoutSubviews
olarak AutoLayout mesajları, çağırarak, ekrandaki görünümleri ile etkileşime bir Superview resized alma vb
Kısıtlamalar en sık InterfaceBuilder'da (.xib ve .storyboard dosyaları) tarafından eklendi ancak kod tarafından ekleyerek aynı ilkeye gerektirir vardır: NSLayoutConstraint
bir örneğini oluşturmak ve uygulanabilir en yüksek görünümüne ekleyin (örneğin, bir çocuk ve bir ana görünüm arasında bir kısıtlama varsa, ana görünümde kısıtlama eklenmesi gerekir. Bir kısıtlama betwe varsa n iki subviews yine ebeveyn ekleyin.)
Apple'ın AutoLayout guides, API documentation ve AutoLayout üzerinde tanıtıcı WWDC videos mükemmel ve bu daha fazla bilgi edinmek için en iyi yerlerde olurdu.
Ben bir cevap yazma sürecindeydim, ama seninki daha iyi. İyi iş! – mattsven
Harika cevap! Kargaşamı gidermeye yardım ettim. Bu kısıtlamaları kod oluşturma konusunda daha fazla bilgiyi nerede bulabileceğimi biliyor musunuz (örneğin, özel bir tablo hücresi)? – Andrew
@Andrew Teşekkürler! Ayrıntılı çalışmam için cevabımı düzenledim. –