Bir iOS uygulaması yaratmak, sadece ekran tasarımlarınızı yapıp bunları kodlamakla biten bir iş değil: Artık 2007'deki gibi sadece tek bir tane iPhone yok! 🙂 Uygulamanızın tasarımını birçok farklı boyuttaki iPad, iPhone ve bunların yan çevrilmiş haline (landscape mode) uyumlu hale getirmeniz gerekiyor. İşte Auto Layout da, tam olarak bunun için kullanılıyor.
Auto Layout, her boyut için ayrı ekranlar yaratmak yerine, ekranın içerisinde elemanların boyut ve konumunu belli kurallarla belirlemenizi sağlar. Bu kurallara, constraint (yani kısıtlama) adı verilir. Ekran çizilirken, Auto Layout ekrandaki elemanların boyut ve konumunu sizin yarattığınız kurallara uyacak şekilde dinamik olarak hesaplar. Böylece uygulamanız farklı boyuttaki cihazlarda düzgün bir şekilde çalışacaktır.
Uygulamamızın tasarımını değiştirmemizi gerektiren iki çeşit değişim vardır: Bunlar internal (yani iç) ve external (yani dış) değişimlerdir. İç değişimler uygulamanın içeriğinden kaynaklanıp ekrandaki elemanları etkilerken, dış değişimler uygulamanın çalıştığı cihazdan kaynaklanıp ekranın boyutunu etkilerler. Haydi bunlardan birkaç örnek inceleyelim:
Apple, uygulamınızın mümkün olduğu kadarını stack view adı verilen elemanları kullanarak yaratmanızı ve ancak bu yeterli olmadığında özel kurallar (yani constraint’ler) belirlemenizi tavsiye etmektedir. Bunun sebebi, stack view kullanmanın constraint kullanımına kıyasla çok daha basit ve anlaşılabilir olmasıdır.
Stack view elemanları, birden fazla elemanı bir satır veya sütunda toplar ve otomatik olarak mevcut alana dağıtırlar. Her UIKit elemanı gibi stack view elemanlarının da birtakım özellikleri vardır. Kısaca bunların üzerinden geçelim:
Bu özelliklerin her biri, aşağıdaki resmi inceledikten sonra daha anlaşılır hale gelecektir. Eğer stack view elemanlarıyla ilgili daha fazla bilgi almak istiyorsanız Apple’ın dokümantasyonunu inceleyebilirsiniz.
Peki stack view elemanları yeterli olmadığında ne yapmalıyız? Cevap: constraint kullanmalıyız! 😉
Auto Layout, ekranınızda yer alan elemanların boyut ve konumunu bir dizi doğrusal denklemlerden yararlanarak hesaplar. Bu denklemler de, sizin ekleyeceğiniz constraint’lere, yani kurallara bağlı olarak yazılır ve ekrandaki iki elemanın özellikleri arasındaki ilişkiyi tanımlar. Haydi bunun bir örneğini inceleyelim:
Bu denklemdeki amacımız, BlueView ve RedView elemanlarımızın arasında 8 piksel boşluk kalmasıdır. Başka bir deyişle, RedView elemanının sol kenarı, BlueView elemanın sağ kenarından 8 piksel sağda olmalıdır.
Bunu yapmak için, RedView.leading (yani RedView elemanının sol kenarı) özelliğinin değerini, 1.0 x BlueView.trailing + 8.0 olarak belirleriz. Multiplier yani çarpan değeri 1.0 olduğundan, sadece BlueView.trailing (yani BlueView elemanının sağ kenarı) özelliğine 8.0 eklenir. Böylece RedView ve BlueView elemanlarımızın konumu arasındaki ilişkiyi tanımlamış olduk.
Tabii ki demin gördüğümüz ilişkiler sadece yatay konum ile sınırlı değil. İncelediğimiz denklemde attribute olarak tanımlanan “leading” ve “trailing” özellikleri, constraint’ler ile belirleyebildiğimiz özelliklerden sadece ikisi. Artık diğerlerini öğrenme vakti geldi! 😁
Unutmayın: Bu özelliklerin her biri, sabit bir sayı değeri veya başka bir elemana bağlı bir değer alabilir.
Neyse ki öğrendiğimiz denklemleri elle yazmamız gerekmiyor. Bunun yerine Xcode içerisinde yer alan Interface Builder ekranını kullanarak, görsel bir şekilde stack view ve constraint’lerimizi yaratabiliriz.
Yeni bir Single View App Xcode projesi yarattıktan sonra, her zamanki gibi Main.storyboard dosyasını açıyoruz. Örnek uygulamamızı yaratmaya başlamadan önce, kısaca Interface Builder içerisinde yer alan Auto Layout menülerini tanıyalım.
Ekranın sağ alt tarafında yer alan ve aşağıdaki resme benzeyen menüler, Interface Builder’ın Auto Layout menüleridir.
Kısaca bu menülerden her birinin ne işe yaradığını inceleyelim.
Unutmayın: Bu menüleri açmadan önce, işlemlerin uygulanacağı bir veya daha fazla eleman seçmeniz gerekir.