2013-06-21 22 views
9

iOS'ta Otomatik Düzen uygulamasında yeniyim. Prensip olarak kavramı gerçekten çok seviyorum ama en basit şeyleri yapmaya çalışırken beni delirtiyor. Sanırım hala basit bazı temel prensipleri kaçırıyorum. Bir uygulamada onunla çalışmaya başlamadan önce temel bilgileri yaparak ve öğrenmeye çalışıyorum, bu yüzden çok basit test projeleri yapıyorum. İşte, beklendiği gibi çalışmadığı kadar basit olanı. Önce işe yarayan kısım. IB, ben tüm viewcontroller doldurmak için bir Görünüm ekleyin ve XCode otomatik IB ile tamamladığınızda/Firar ve 0'a Space Lider/Üst/Alt kısıtlamaları belirler, bu beklendiği gibi çalışır:Sınırları Ayarlama, bunları IB'de ayarlamaktan programlı olarak farklı mı?

enter image description here

enter image description here

Büyük üzere döner!

Şimdi kodda aynı şeyi yapmaya çalışıyorum: Tek-view uygulaması için varsayılan kod dışındaki orada

tüm kod
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds]; 
redView.backgroundColor = [UIColor redColor]; 
[self.view addSubview:redView]; 

redView.translatesAutoresizingMaskIntoConstraints = NO; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; 
} 

.

ben programlı IB ile olsun aynı şeyi ayna çalışırken, yukarıdaki kod çalıştırmasına

, bu dönüşten sonra olsun:

enter image description here

Nasıl olur aynı kısıtlamalar farklı sonuçlara yol olduğunu? Muhtemelen çok basit ve utanç verici aptalca bir şey eksik. Yardım et!!!

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[redView]|" 
                    options:0 
                    metrics:nil 
                    views:NSDictionaryOfVariableBindings(redView)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[redView]|" 
                    options:0 
                    metrics:nil 
                    views:NSDictionaryOfVariableBindings(redView)]]; 

IB AutoLayout bir ağrı olabilir ve ben Görsel Biçim Dili ile aşinalığım constraintWithItem daha az iş olduğu bulundu: Burada

cevap

6

Bunu yapacağını nasıl nitelik: relatedBy: toItem: nitelik: çarpan: sabit:

+0

Teşekkürler! (V: | [redView] içinde eksik | ekledikten sonra ... çalışır ama neden diğer kodum çalışmıyor ?? ne IB gösterir, değil mi ??? – user1459524

+0

Evet, orada bir boru eksik oldu Sabit, Ve, dürüst olmak gerekirse, ben VFL buldum ve AutoLayout ihtiyaçları için daha fazla baktım. – geraldWilliam

+0

Merhaba 6 ay sonra aynı problemle karşılaştım ama mycontroller.view ile şapka doğrudan, mycontroller.view içinde bir görünüm değil. Ve sadece bir şey yok! – shinyuX

1

Leading and Trailing'in yerine, Üst ve Alt'ı kullanın. Bunları orijinal gönderide karıştırdığınızı unutmayın. Liderlik ve Firar insanları karıştırmak gibi görünüyor!

7

Bunun eski olduğunu biliyorum ama bence kısıtlarınızla ilgili sorun, neyin devam ettiğini vb. Ben aşağıdakilere kodunuzu tadil ettik ve şimdi beklendiği gibi ekranı doldurur:

 UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds]; 
redView.backgroundColor = [UIColor redColor]; 
[self.view addSubview:redView]; 

redView.translatesAutoresizingMaskIntoConstraints = NO; 

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]]; 

Sen (sondaki aslında sağ taraf değil alt ve sen ilişkin edildi dibine eşit sondaki sınırlaması ayarlamak edildi sol taraftaki en üst kısıtlama (lider)

İlgili konular