SORU
10 EKİM 2012, ÇARŞAMBA


Oluşturma kısıtlamaları programlı düzeni

Bir çok kişi zaten bu konuda sorular ton sordum biliyorum ama cevap bile çalıştıramıyorum.

Film şeridi kısıtlamaları ile uğraşıyorum, kolay ama kod zor bir zaman var. Örneğin, ekran yönünü göre sağ tarafta kalıyor ve ekran yüksekliği olan bir görünüm için deneyin. Bu benim kod:

UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 748)];
myView.backgroundColor = [UIColor redColor];
[self.view addSubview:myView];
[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"V:|-[myView(>=748)]-|"
    options:0 metrics:nil
    views:NSDictionaryOfVariableBindings(myView)]];

Bazı kısıtlamaları tatmin etmiyor. Sorunun ne olduğunu göremiyorum. Ayrıca, neden ben self.myView gibi bir özelliği yerine myView gibi yerel bir değişken kullanabilir mi?

CEVAP
24 EKİM 2012, ÇARŞAMBA


Kod Otomatik Düzen kullanarak, çerçeve ayarı bir şey yapmaz. Yani yukarıdaki görünüm 200 genişlik belirttiğiniz aslında, bu kısıtlamaları ayarladığınızda hiçbir şey ifade etmiyor. Manzara bir kısıtlama kesin olarak ayarlamak için, dört şey gerekir: x konumu, y konumu, genişliği bir, ve herhangi bir devlet için bir yükseklik.

Yukarıdaki kodu şu anda, sadece iki (yükseklik, superview ve y-position göre, superview göre). Buna ek olarak, manzara superview bu kısıtlamaları kurulum nasıl bağlı olarak çatışma, iki gerekli kısıtlamaları var.Eğerthe superview bu yükseklik belirten gerekli bir kısıtlama "unsatisfiable kısıtlamaları" özel durum. bir alacak 748, daha az değere sahip olmak vardı

Kısıtlamaları ayarlamadan önce görünüm genişliği ayarlayın olman bir şey ifade etmiyor. Hesaba bile eski çerçeve alacak ve yeni bir çerçeve bu görünümler için belirtilen olan tüm kısıtlamaları dayalı hesaplar. Kod otomatik düzen ile uğraşırken, ben genellikle sadece yeni bir görünüm initWithFrame:CGRectZero oluşturmak veya init sadece.

Oluşturmak için kısıtlama ayarlamak için gerekli düzen, sözlü olarak açıklanan soru, ihtiyacın Ekle yatay kısıtlamaları bağlı genişlik ve x-pozisyon vermesi tam belirtilen düzeni:

[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"V:|-[myView(>=748)]-|"
    options:NSLayoutFormatDirectionLeadingToTrailing
    metrics:nil
    views:NSDictionaryOfVariableBindings(myView)]];

[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"H:[myView(==200)]-|"
    options:NSLayoutFormatDirectionLeadingToTrailing
    metrics:nil
    views:NSDictionaryOfVariableBindings(myView)]];

Sözlü olarak bu düzeni açıklayan dikey kısıtlama ile başlayan aşağıdaki gibi okur:

myView üst ve alt Doldurma ile superview yüksekliği dolduracak standart alanı eşit. myView. superview en az bir yüksekliğe sahiptir 748pts. myView genişliği 200pts ve doğru bir dolgu için eşittir. onun superview karşı standart alan.

Eğer sadece superview yükseklik kısıtlamadan tüm superview yüksekliği doldurmak için Görünüm istiyorsanız, o zaman sadece görsel biçim metin (>=748) parametre ihmal eder. Eğer düşündüğünüz (>=748) parametre gereklidir hakkı yüksekliği değilsin bu örnek: çivileme görünüm superview kenarları kullanarak barın (|) ya da bar Alanı (|-, -|) sözdizimi mi veriyorsun görünümü y-konumu (iğneleme görünümünde bir tek kenarlı) ve bir y-pozisyonu ile yükseklik (iğneleme görünüm hem de kenarları), böylece tatmin edici senin kısıtlama belirlemek için görüntüleyin.

İkinci sorunuza gelince:

Kullanarak NSDictionaryOfVariableBindings(self.myView) (eğer bir özellik kurulum için myView) ve besleme o içine VFL kullanın self.myView senin VFL metin, sen-ecek büyük olasılıkla almak bir durum olduğunda otomatik çalışır ayrıştırma senin VFL metin. Sözlük anahtarları nokta gösterimi ve sistemvalueForKeyPath:kullanmaya ilgisi var. See here for a similar question and answer.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • Nightmare2005

    Nightmare200

    14 Ocak 2007
  • Skittles Page

    Skittles Pag

    28 Mart 2011