Xcode 6'daki Storyboard'da "Kenar boşluğuna sınırla" nedir?


249

Otomatik düzenleme ve kısıtlamalar ile çalışıyorum ve Constrain to marginsXcode 6'da Xcode 5'te bulunmayan ve varsayılan olarak işaretlenen bir seçenek olduğunu buldum .

Bir test projesi oluşturdum UITableViewve çerçeve ile aynı boyutta bir ViewController ekledim ve kısıtlamalar ekledim

Xcode 6 Burada tableview görünümü ile aynı kareye sahip olsa da görebilirsiniz Xcode kısıtlama olarak -16 eklemeyi önerirken Xcode 5 0 aralığı eklemeyi önerir.

Kenar boşluğuyla sınırla işaretlendiğinde

Şimdi "Kenar boşluğu ile sınırla" seçeneğinin işaretini kaldırdığınızda Xcode 5 ile aynı şekilde davranır ve kısıtlama olarak 0 eklemenizi önerir

Sınırsız marj sınırlaması ile

Ayrıca, Sınır kontrolüyle sınır işaretini kontrol ettiğimde, artık film şeridi dosyasını Xcode 5'te açamadığımı buldum, bu yüzden Xcode 6'da kesinlikle yeni bir şey

Umarım sorumu doğru bir şekilde açıklayabilirim. "Marj ile sınırla" nın gerçekte ne yaptığını ve ne zaman kullanmam gerektiğini ve kullanmamam gerektiğini anlamak istiyorum. Çok basit ve açık bir şey olursa özür dilerim.

DÜZENLE

Burada tartışılan düzen kenar boşlukları hakkında bir şey buldum, bununla ilgili olup olmadığını merak ediyorum.


15
Özür dilemeye gerek yok - bunun ne yaptığı belli değil.
Ben Clayton

4
+1 özür dilemeye gerek yok, ben de bu soruyu sormak istedim. BTW: Xcode5'te film şeridini açmak için bir göz atın: stackoverflow.com/a/25298909/529243
Olaf

1
Bu bulduğum bir açıklamaya en yakın şey: stackoverflow.com/questions/25275901/…
Nathaniel

Bunu nasıl devre dışı bırakabilirim?
orkenstein

2
Evet gerçek acı bu. Kalıcı olarak nasıl işaretini kaldıracağımı anlayamadım.
Bhumit Mehta

Yanıtlar:


315

İnsanlar şikayet ediyorlar neden "olduğunu hiç anlamıyorum Kenar boşlukları önce iOS 8. şey üzerinde salt çökmesine neden olacak "

Bir xib dosyasında veya görsel marjı kıyasla söz konusu kısıtlamaları ayarlama ETMEZ -iOS7 ilgili uygulama kazasında yapmak ve bu ETMEZ sizin iOS7 cihazınızda bir UI fark yaratmak ne, sürece dokunmayın olarak UIView.layoutMarginsve UIView.preservesSuperviewLayoutMarginskodunuzda özelliklerini.

İOS8'deki Kenar Boşlukları Nedir

Düzen kenar etrafında dolgu temsil a UIViewbir boşluk bir görünüm ve subview kenarı arasında kalan sağlamak için - subviews yerleştirirken düzeni sistemi kullanabilmektedir. Bu açıdan, CSS'deki bloklarla ilişkili dolgu özelliğine çok benzer.

resim açıklamasını buraya girin

Varsayılan olarak, UIViewa'nın her iki tarafında 8 puntoluk düzen marjları vardır ve bu Arayüz Oluşturucu'da değiştirilemez . Ancak, UIView.layoutMarginskodu yalnızca iOS8'de bulunan kodda ayarlayarak bu değerleri ayarlayabilirsiniz.

IB'yi Editör> Tuval> Yerleşim Dikdörtgenlerini Göster ile kenar boşluklarını görüntülemeye alabilirsiniz : resim açıklamasını buraya girin

Kenar boşlukları, görünümlerinizi ve alt görünümlerinizi düzenlemenize yardımcı olmak için kullanılabilir. Her UIViewbiri varsayılan olarak kenar boşluklarıyla gelir, ancak yalnızca bir kenar boşluğu ile ilgili bir kısıtlama ayarladığınızda görünüm yerleşimini etkiler.

Kenar Boşlukları nasıl kullanılır?

Interface Builder'da kenar boşluklarını kullanmanın tek yolu , kısıtlamalarınızı yapılandırırken Kenar boşluğuna göre seçeneğini işaretlemektir. Bu, görünümümü düzenlerken sınırınızı kenarlar yerine kenar boşluklarını kullan seçeneğine yönlendirirsiniz .

resim açıklamasını buraya girin

Bir görünüm ve alt görünümü arasında önde gelen bir kısıtlama oluşturmanın dört farklı yoluna bakalım. İncelediğimiz her kısıtlama için açıklanan ilk ilişkilendirme alt görünümün öncüsü , ikincisi ise denetimin öncüsü olacaktır . Dikkat etmek istediğiniz şey, her bir sınırlama ucunun Kenar boşluğuna göreceli seçeneğinin kontrol ve işaretini kaldırmasıdır , çünkü bu, kısıtlamanın kenar boşluğuna mı yoksa kenarın kenarına mı bağlı olduğunu tanımlar.

  1. İlk öğe (işareti kaldır), ikinci öğe (kontrol): Bu durumda, alt görünümün sol kenarının denetimin sol kenar boşluğuna (bu resimde gösterildiği gibi) hizalanması gerektiğini beyan ederiz.

resim açıklamasını buraya girin

  1. İlk öğe (işaretini kaldır), ikinci öğe (işaretini kaldır): Her ikisi de kenar boşluğu değil kenar kullanır . Bu durumda, alt görünümün sol kenarının denetimin sol kenarına hizalanması gerektiğini beyan ederiz.

resim açıklamasını buraya girin

  1. İlk öğe (kontrol), ikinci öğe (işaretini kaldır): Bu durumda, alt görünümün sol kenar boşluğunun denetimin sol kenarına hizalanması gerektiğini beyan ederiz. Bu tür bir düzen aslında alt görünümü denetimle örtüşür.

resim açıklamasını buraya girin

  1. İlk öğe (kontrol), ikinci öğe (kontrol). Bu hem durum 2 ile aynı etkiye sahiptir, çünkü hem alt görünüm hem de denetim aynı varsayılan kenar boşluğuna sahiptir. Alt görünümün sol kenar boşluğunun denetimin sol kenar boşluğuna hizalanması gerektiğini beyan ediyoruz.

resim açıklamasını buraya girin

Marjlar hakkında iyi olan nedir

Bu yeni özellik (iOS8), yalnızca kenar boşluklarını kullanmaya karar verirseniz kullanıcı arayüzü geliştirmesini etkiler.

Kenar boşluklarını kullanarak, tek bir mülkün değerini değiştirerek paylaşılan bir denetim ile ortak bir ilişki paylaşan birden çok alt görünümün yerleşimini ayarlayabilirsiniz. Bu, ilişkili tüm kısıtlamaları sabit değerlerle ayarlama konusunda açık bir kazançtır, çünkü tüm boşlukları güncellemeniz gerekiyorsa, her bir değeri tek tek değiştirmek yerine, denetimin marjını tek bir satırla güncelleyerek ilgili tüm yerleşimi aynı anda değiştirebilirsiniz. bunun gibi kod:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

Bu yararı göstermek için, aşağıdaki durumda tüm alt görüşlerin sol kenarları denetimin sol kenarına hizalanır. Böylece, denetimin sol marjını değiştirmek tüm alt görünümleri aynı anda etkileyecektir.

resim açıklamasını buraya girin


Detaylı açıklama için teşekkürler. Bunu kabul edilmiş bir cevap olarak işaretliyorum, çünkü bu güzel bir şekilde açıklıyor.
Bhumit Mehta

Teşekkürler @Bhumit, umarım bu cevap yardımcı olur.
Scott Zhu

4
"İnsanların neden şikayet ettiğini hiç anlamıyorum". Belki de son betalardan biriyle davranış değişti, kontrol etmedim. Ancak en azından birkaç ay önce, kodda layoutMargins'i ayarlamaya çalışmasanız bile çökmeye neden oldu.
KPM

Yeni kısıtlamalar eklerken, Xcode'un daha yeni sürümlerinin, aynı "Kenar Boşluklarına Göreceli" bayrağını ayarlayan "Kenar Boşluklarına Sınırla" kutusunun işaretini kaldırmanıza izin verdiğini belirtmek gerekir. Birkaç tıklama kaydettiğinden bu yararlıdır! Büyük cevap btw, çok iyi açıkladı ve görüntüleri çok yararlı.
EricWasTaken

Resimlerin dropbox'ta bulunduğunu belirttim. Görüntüleri SO'da barındırmak daha iyi olmaz mıydı?
test

63

İOS 8'de artık kısıtlamalarınızı, denetimin sınırlarının kendileri yerine, denetimin sınırları için önceden tanımlanmış bir marja göre tanımlama seçeneğiniz var. Evet, tamamen dokümanlarda işaret ettiğiniz düzen kenar boşluklarıyla ilgilidir. Bir avantaj, kenar boşluklarınızı dinamik olarak veya her bir cihaz türü için farklı bir şekilde yeniden tanımlayabilmeniz ve düzen kısıtlamaları değiştirmeden ilgili olarak güncellenecek olmasıdır.

Ne zaman kullanılır: bu yeni esneklikten yararlanmak istediğinizde.

Ne zaman KULLANILAMAZ: iOS 7 veya daha düşük sürümlerde çalışmayı hedefleyen herhangi bir uygulama için.


21
Varsayılan olarak etkinleştirilmediyse ve iOS 8'den önce herhangi bir şeyde kesin bir
çökmeye

1
Daha fazla anlaşamadım.
KPM

42

UIView üzerinde özelliktir: layoutMargins. Apple Dokümanlarına bakın . Temel olarak düzen kenar boşlukları 8,8,8,8 (varsayılan) ise, kapsayıcı kenar boşluğuna 0 önde gelen bir kısıtlamanın 8 x konumu olacaktır . Bunun yalnızca iOS8 veya sonraki sürümlerinde kullanılabildiğini unutmayın.

Kısıtlarının kapsayıcı marjına gitmesini istemeyen herkes için:

Kısıt oluşturma açılır penceresini göstermek için CTRL + tıklama + sürükleme.

Menü varsayılan olarak kenar boşluğuna sınırlama oluşturduğunu gösteriyorsa, kısıtlamanın kap kenar boşluğuna değil kapsayıcıya yapılmasına izin vermek için seçenek / alt tuşunu basılı tutun.

Şimdi kenar boşluğuna DEĞİL kısıtlama oluşturma seçeneğini gösterecektir. Bu benim kullanımımda YOL daha hızlı.


3
Bu muhtemelen orada bulduğum en iyi çözüm. "Kenar boşluklarını koru" seçeneğinin işaretini kaldırmak her zaman işe yaramıyor ve biraz da büyülü geliyor. Bu harika.
Levi McCallum

Neden varsayılan olarak 10pt değil?
ZaBlanc

11
Apple, kodu okuyabileceğimiz sayıları seçerek değil, kullanılabilirlik araştırmasına göre uzunluk ve boyut seçme geçmişine sahiptir. Örneğin, birçok şey için varsayılan yükseklik 44 veya 35 pt'dir. @ZaBlanc
Kyle Robson

Varsayılan olarak kenar boşluğu olmadan film şeridi üzerinde kısıtlama eklerken mükemmel çözüm. Teşekkür ederim!
Mart'ta inix
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.