2013-01-07 8 views
8

boyutlandırma ile ilgili boşluk değiştirme otomatik düzen kullanılarak:eşit I (örnek olarak) 3 subviews benim uygulaması ile bir görünüme sahip ise, aralarında aşağıdaki aralık ile

TOP - 40 puan - Subview 1-60 noktaları - SUBVIEW 2 - 80 puan - SUBVIEW 3 - 80 puan - BOTTOM

Her bir alt sayfamın yüksekliğini ve genişliğini koruduğundan emin olmak için otomatik düzeni nasıl kullanabileceğimi anlıyorum ve herşeyi 3.5 YA DA uyumlu hale getirebiliyorum. 4 inç iPhone ekranı.


Ama bunu bir 3.5" için hizalanmış ekranı ve ardından 4" gitti ekranında olsaydı, her aralık artacağını öyle yapmak gerekir kısıtlaması ne tür çalışamaz orantılı olarak (örneğin 40 puan 47, 60 ila 71, 80 ila 95'e veya oraya) gider.

Bu mümkün mü? Yoksa öğeler arasındaki tüm boşlukları eşit hale getirmem gerekiyor mu? (Eğer öyleyse ben hala eşit derecede yeniden boyutlandırmak alacağı nasıl?) Ben bir şey kapalı özledik eğer öyleyse Otomatik Düzen yeniyim, yoksa lütfen demektir işlemi açıkça yapmamış


Bana haber ver, teşekkür ederim.

cevap

1

Bunu yapmanın kolay bir yolunu bilmiyorum. Tüm alanların eşit olduğu bir yer yaptım, ancak bunu yapmak için boşlukları görünmez etiketlerle doldurmalıydım (sadece başlıksız etiket). Bu yüzden, 4 tane görünür nesnemi ve 5 "ara etiketini" tamamladım. Hiçbir sabit yükseklikleri 4 gözle görülür nesneleri tüm açık yüksekliklere sahiptir ve ara parçalar yapılmış, ancak olarak ayarlandı hepsi aynı:

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    NSMutableDictionary *viewsDict = [NSMutableDictionary dictionary]; 
    for (int i=1; i<5; i++) { // Labels with titles 
     UILabel *b = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 44)]; 
     b.text = @"This is my label"; 
     [b setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [viewsDict setObject:b forKey:[NSString stringWithFormat:@"b%d",i]]; 
    } 

    for (int i=1; i<6; i++) { // Spacer labels 
     UILabel *l = [[UILabel alloc ]init]; 
     [l setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [viewsDict setObject:l forKey:[NSString stringWithFormat:@"l%d",i]]; 
    } 

    for (id obj in viewsDict.allKeys) 
     [self.view addSubview:viewsDict[obj]]; 

    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[l1][b1][l2(==l1)][b2][l3(==l1)][b3][l4(==l1)][b4][l5(==l1)]|" 
                    options:NSLayoutFormatAlignAllLeading 
                    metrics:nil 
                    views:viewsDict]; 


    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[b1]" 
                    options:0 
                    metrics:nil 
                    views:viewsDict]; 


    [self.view addConstraints:constraints]; 
    [self.view addConstraints:constraints2]; 
} 

alanlarda farklı hale getirmek için, sana uzun formu kullanmak zorunda düşünüyorum Görsel formattan ziyade kısıtları ifade etmek. Aşağıdaki kod benim için çalışıyor gibi görünüyor. Yukarıdaki gibi görüntülemelerin aynı tanımını kullanıyorum, ancak başlıklı etiket sayısını 3'e ve aralayıcıları 4'e soruyla eşleştirmek için kestim. Göreceli boşluk, örneğinizde olduğu gibi olmalıdır: 2: 3: 4: 4.

NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTop relatedBy:0 toItem:viewsDict[@"l1"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l1"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:viewsDict[@"b1"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con3 = [NSLayoutConstraint constraintWithItem:viewsDict[@"b1"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:viewsDict[@"l2"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con4 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l2"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:viewsDict[@"b2"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con5 = [NSLayoutConstraint constraintWithItem:viewsDict[@"b2"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:viewsDict[@"l3"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con6 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l3"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:viewsDict[@"b3"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con7 = [NSLayoutConstraint constraintWithItem:viewsDict[@"b3"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:viewsDict[@"l4"] attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    NSLayoutConstraint *con8 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l4"] attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; 
    NSLayoutConstraint *con9 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l1"] attribute:NSLayoutAttributeHeight relatedBy:0 toItem:viewsDict[@"l2"] attribute:NSLayoutAttributeHeight multiplier:.66 constant:0]; 
    NSLayoutConstraint *con10 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l1"] attribute:NSLayoutAttributeHeight relatedBy:0 toItem:viewsDict[@"l3"] attribute:NSLayoutAttributeHeight multiplier:.5 constant:0]; 
    NSLayoutConstraint *con11 = [NSLayoutConstraint constraintWithItem:viewsDict[@"l1"] attribute:NSLayoutAttributeHeight relatedBy:0 toItem:viewsDict[@"l4"] attribute:NSLayoutAttributeHeight multiplier:.5 constant:0]; 
    NSLayoutConstraint *con12 = [NSLayoutConstraint constraintWithItem:viewsDict[@"b1"] attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:100]; 
    NSLayoutConstraint *con13 = [NSLayoutConstraint constraintWithItem:viewsDict[@"b2"] attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:100]; 
    NSLayoutConstraint *con14 = [NSLayoutConstraint constraintWithItem:viewsDict[@"b3"] attribute:NSLayoutAttributeLeading relatedBy:0 toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:100]; 

    NSArray *constraints = @[con1,con2,con3,con4,con5,con6,con7,con8,con9,con10,con11,con12,con13,con14]; 
    [self.view addConstraints:constraints]; 
+0

Great, fikir için teşekkürler. Bunu deneyeceğim ve istediğime yaklaşan bir şeyi hackleyeceğimi göreceğim :) –

+0

Otomatik Düzenlemeyi kullanmayı öğrendikten sonra, fikrinizi başarılı bir şekilde kullanmayı başardım. Teşekkür ederim! –

+0

Bunu deneyen herkese bir öneri kelimesi, otomatik olarak eklenen yükseklik kısıtlamalarının olmadığını kontrol edin - bu durum, döndürme sırasında ekran boyutundan daha büyük bir toplam yüksekliğe neden olabilir. Varsa, önceliklerini uygulamak istediğiniz yükseklik kısıtlamalarından daha düşük bir değere azaltabilirsiniz. –

11

Trick bir değil İKİ kısıtlamaları eklemek için görüşleriniz arasındadır. "Greater veya Eşit" ile ve "Daha Az Ya da Eşdeğer" ile bir tane. en küçük boyut (Daha sonra ya da eşdeğer) 3.5" ile mesafe olmalıdır 4" ekranda aralık olmalıdır

Örnek ekran en büyük boyutu (daha az veya eşit".:.

TOP - 40 puan - subview 1-60 noktaları - subview 2-80 noktaları - subview 3-80 noktaları - ALT

TOP - SUBVIEW1. Interface Builder ikisini seçin sınırlaması ekleyin "Dikey Boşluk" iki Bir tanesini Büyükşehir'e ayarlayın. Sonra veya Eşit 40. Diğerini Daha Az veya Sonraya ayarlayın 47.

Tüm Daha Büyük Değerlerin toplamı + görünümlerinizin tüm yükseklikleri 480 piksel olmalıdır (3.5 ") Tüm Lesser then değerlerinin + görünümlerinizin tüm yüksekliklerinin toplamı 568 piksel (4")

+0

Mükemmel! Benim durumumda SuperView> = 0 ile SubView ve SubView <= 106 ile SuperView arasındaydı. – Jacksonkr

İlgili konular