2016-04-05 15 views
15

Apple belgelerini okuyarak, otomatikleştirme, Otomatik Erişim ve kısıtlamalara ilişkin referansları buluyorum. Bunların tümünü kod içinde kullanma arasındaki fark nedir? Bu teknikleri iOS 9'da programatik olarak uygulamanın doğru yolu nedir? iOS'ta, otomatikleştirme, Otomatik Zamanlama ve kısıtlamalar arasındaki fark nedir?

otomatik yeniden boyutlandırma temelde inşa etmek geliştiricilerin Apple amacıyla uygulamaya konulmuştur eski yol için kolektif bir terimdir

  • otomatik yeniden boyutlandırma
  • AutoLayout:

cevap

32

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.

+3

Ben bir cevap yazma sürecindeydim, ama seninki daha iyi. İyi iş! – mattsven

+0

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

+0

@Andrew Teşekkürler! Ayrıntılı çalışmam için cevabımı düzenledim. –

İlgili konular