Arabirim Oluşturucu / xib / nib ile maskeleri programlı olarak otomatikleştirme


216

Ben xib doğru marj göstergesi etkinleştirmek UIViewAutoresizingFlexibleLeftMarginiç kodu ve benzeri kullanmaya eşdeğer (muhtemelen yanlış) bir varsayım vardı .

Yani, bu anlık görüntüye göre düşünürdüm: resim açıklamasını buraya girin

Daha sonra bugün çapraz kontrol etmek zorunda kaldım ve bu ipliğin üzerine tökezledim .

Ayrıca, bu bağlantıdaki "Düzen Değişikliklerini Otomatikleştirme Kurallarını Otomatik Olarak Kullanma" başlıklı başlıklı elma belgeleri: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

Şimdi, otomatik olarak yeniden boyutlandırma maskelerinin programlı olarak xib ayarlarına nasıl eşdeğer olacağı konusunda aklımda yenilenmiş bir konsept var:

Senaryo 1 : Yalnızca ayar (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)aşağıdakilere eşdeğerdir:

(UIViewAutoresizingEsneklikGenişlik | UIViewAutoresizingEsneklikYükseklik)

XIB'de mi?

Senaryo 2 : Koddaki ayar (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)şuna eşdeğerdir:

(UIViewAutoresizingF FlexibleWidth | UIViewAutoresizingF FlexibleHeight | UIViewAutoresizingF FlexibleLeftMargin | UIViewAutoresizingF FlexibleRightMargin | UIViewAutoresizingF FlexibleTopMargin | UIViewAutoresizingF FlexibleBottomMargin)

XIB'de mi?

Yenilenen 2 senaryom doğru mu? Şu an anlayışımda mıyım?


3
Benimle dalga geçiyorsun? Ama karışıklığımın olduğu yer de var. Eğer üste sarılmak istersem, altını otomatik olarak boyutlandırıyorum. İyi iş elma. Bu şimdiye kadar gördüğüm en aptalca düzen.
user4951

1
En üste sarılmak istiyorsanız, bit maskesi kodunda UIViewAutoresizingF FlexibleTopMargin'den bahsetmediğinizden emin olmalısınız. Önceki varsayım yanlıştı ve bu yüzden bu soruyu temizlemek için bu soruyu yayınladım.
Raj Pawan Gumdal

Varsayımınız doğru. Nerede yanlışsın?
user4951

Evet, alıntı yaptığınız iki senaryo doğrudur.

3
Bunun için basit bir araç yaptım: erkanyildiz.me/lab/autoresizingmask kullanabilirsiniz.
erkanyildiz

Yanıtlar:


35

Evet, Arayüz Oluşturucu bir anlamda "tersine çevirir" (veya ona nasıl baktığınıza bağlı olarak UIView). Alıntı yaptığınız "senaryolarınız" doğrudur.


47

Evet, doğru bir şekilde alıntı yaptınız. Ayrıca, biraz geriye doğru hissettiğini kabul ediyorum, bu nedenle yazınızı takdir ediyorum.

UIViewAutoresizingFlexibleMarginsBir UIView'in kenar boşluğunu her yönde esnek hale getirirken bir önişlemci Makrosu kullanmak isteyebilirsiniz . Bunu önceden derlenmiş başlık dosyasına koydum, böylece her yere dahil edildi.

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

Kullanmak UIViewAutoresizingFlexibleMargins, herhangi bir tarafa sarılmayacağından bir UI Öğesinin merkezde kalmasını sağlar. Elemanın ebeveyni ile birlikte büyümesini / küçülmesini sağlamak için sırasıyla UIViewAutoresizingFlexibleWidthve öğelerini ayarlayın UIViewAutoresizingFlexibleHeight.

Ben UIViewAutoresizingFlexibleMarginsdaha sonra gibi başvurabilirsiniz çünkü kullanmayı seviyorum:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

onun yerine

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

Sıklıkla bu kenar boşluklarını yukarıdaki örnek gibi bir satırda birlikte görüyorum. Okuması zor.


4
Her yöne esnek olmalı (UIViewAutoresizingF FlexibleWidth | UIViewAutoresizingF FlexibleHeight) Sanırım? Yoksa yine kafam karıştı mı?
Raj Pawan Gumdal

4
FlexibleMargins, öğenin ortalanmasını sağlar (sol, üst, sağ veya alt kenar boşluğuna sarılmamalıdır). Esnek genişlik / yükseklik, ui elemanının sırasıyla büyümesini / küçülmesini sağlayacaktır.
Sam

4
Şimdi her şey net mi? Ayrıca, mesajınızı takdir ettiğimi söylediğimde bunu gerçekten kastetmiştim. Aslında b / c bu geçmişte beni karıştırdı favorim. Bence bu harika bir S.
Sam

3
Evet, teşekkürler, şimdi anladım, "Esnek kenar boşlukları" ve "Esnek genişlik / yükseklik". Bu her şeyi açıklıyor ve "sol, üst, sağ veya alt kenar boşluğuna
sarılmamanız

0

resim açıklamasını buraya girin

Kutunun içindeki dikey / yatay oku (yay denir) etkinleştirmek, yüksekliği / genişliği esnek hale getirir. Ancak bir dış hattın (payanda adı verilir) etkinleştirilmesi, o tarafı esnek / esnek yapmaz.

Sol dış çizgiyi (sol payanda) etkinleştirmek, etkinleştirmeye eşdeğer değildir UIViewAutoresizingFlexibleRightMargin. Bunun yerine, UIViewAutoresizingFlexibleRightMargin= üzerinde sağ gergi kolu, devre dışı eğer kapalı sağ gergi kolu etkinse.

İlk başta oldukça kafa karıştırıcıdır, ancak yakından görürseniz, yaylarda ve dikmelerde bir fark vardır. Apple'ın bunu neden yaptığını bilmiyorum, ama benim için, kullanımının daha kolay olduğu bazı durumlar vardı. Ve kodda zıt özellikler kullanmak daha da kafa karıştırıcıdır.


0

Swift 4 bunu kullan

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

Objective-C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.