Swift Content compression resistance priority Nedir, Nasıl Kullanılır?

Yusuf Özgül
2 min readDec 10, 2019

Selamlar, daha önce hiç iki label’ı yan yana koyup auto layout ile düzgün hizalanmasını denediniz mi, eğer denediyseniz size X ekseninde hizalayamamadığını bildirerek bir hata verecektir. Bakalım nasılmış?

Burdaki işlem tek satırlı görece büyük bir metin ve çok satırlı daha küçük bir metin var. Peki isteğimiz neydi, büyük label’ın uzayıp kısaldıkça küçük label satırlarını kendine göre ayarlasın. Ancak bu durumda pek mümkün değil gibi. Bunu çözmek için yapılması gerekenin ne olduğuna bakalım.

Priority ( Öncelik )

Auto Layout’ta constraintler için bir priority değeri vardır. Tüm constraintler için mecburidir. Kendimizin elle verdiği constraintler default 1000 yani şart olarak tanımlanır. Çeşitli durumlara göre constraintlerin öncelik değerini değiştirerek farklı şartlarda değişiklik göstermesini sağlayabiliriz. Peki şimdi bunun konumuzla alakası ne zaten elle constraint verdik ama hata ile karşılaştık 🤔

Priority değeri sadece constraintler için olmaz kendi boyutunu ayarlayabilen ui elementleri içinde kullanır örneğin label. Bu priority ne işe yarar?

Label kendini boyutlandırırken eğer birden fazla satıra izin verildiyse yükseklik yani satır ve izin sınırlandığı kadar genişliği ayarlar. Yukarıdaki problemimiz de bu aslında. İki label aynı priority değerinde birbirine üstünlük sağlayamıyor genişliğini ayarlayamıyor. Bu sorunu çözmek için label’ın sıkıştırmayı önleme önceliğini yani “content compression resistance priority” değiştirmemiz gerekiyor. Sonuçta biri diğerine üstünlük kuracak. Dilersek büyük label’ın yataydaki önceliğini arttırmak ya da küçük olanı azlatmak. Azaltmak çözüm olsa da çeşitli senaryolarda problem çıkabilir. Zaten karmaşık auto layout ayarlamalarını sağlamak için 1–1000 aralığında değer ataması yapabiliyoruz.

Büyük label’ın önceliğini diğer label’a göre daha büyük yaptığım için hata çözüldü. Büyük label uzadıkça küçük label daralan ve satır sayısı artacak.

Bu konuyu farklı blog yazılarımla genişletmeyi planlıyorum. Auto Layout oldukça karmaşık bir işlem. Zamanla yeni şeyler öğreniyorum. Bunlardan paylaşmak istediklerimi kısa yazılarla yazıyorum. Diğer yazılarıma blog sayfasından ulaşabilir, yorum ya da iletişim sayfasını kullanarak benimle iletişim kurabilirsiniz.

Kaynaklar:

--

--