2014-09-11 23 views
10
'dan daha büyük

iOS 8'de VFL'deki kısıtlamalarla ilgili sorun yaşıyorum, 6 ve 7'de ise sorun yok. Bu sınırlamadır:iOS 8 otomatik sıralama, VFL ve kenar boşluğu eşit veya

H:|-margin-[_imageView]-(=>margin)-[_label]-margin-| 

Hem _imageView_ ve _label kendi doğru içsel genişliğini almak ve beklendiği gibi marj büyür. Ben görsel olarak sorun yok

|-[_imageView]-------------------------------[some text]-| 

|-[_imageView]---------------------------[a larger text]-| 

|-[_imageView]-----------------------[a very large text]-| 

|-[_imageView]-[a very very very very very very larg...]-| 

ulaşmak istediğiniz ama bir kırık kısıtlama özel durum oluşturur: _autolayoutTrace baskı sonrasında hiçbir belirsizliğe yer

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7b856ee0 H:[UIImageView:0x7b8ef1f0]-(>=12)-[UILabel:0x7b8e7c60'Test']> 

olduğunu.

H:|-margin-[_label1]-(=>margin)-[_label2]-margin-| 

sorun sonraki adımlar aşağıdaki çözülebilir: öncelikleri >= çıkarmadan kısıtlamasını değiştirme ve ekleme

:

kısıtı içeriyorsa

Ancak sadece hiç sorun yoktur edilir etiketler

H:|-margin-[_imageView]-([email protected])-[_label]-margin-| 

_imageView

ait sarılma önceliğini ayarlama herhangi bir platformda sorun yoktur bu kurallara ile _label

[_label setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal]; 

sıkıştırma direncini ayarlanması

[_imageView setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal]; 

. Tüm bunlar iOS 8'de gerekli mi? Bu bir hata mı yoksa yanlış mı yapıyordum?

Teşekkürler. Burada sıfırdan bir proje başlatılmış ve ettik

+0

Tahmin ettiğim, kırık kısıtlamanın "> = 12" yi onurlandırmak için çok uzun bir metin dizesinden oluşması; diğer bir deyişle, kenar boşlukları + görüntü + metni genişliği ana görünümün genişliğini aşıyor. IOS 8'in mizanpaj marjlarını tanıttığı doğrudur, ancak VFL ifadelerinden herhangi birinin herhangi bir yardımdan nasıl etkilendiğini yeterince bilmiyorum.Etiketinizin satır yüksekliğini 0 olacak şekilde ayarlayın, böylece dikey olarak genişleyebilir ve yatay kısıtlamayı koruyabilir misiniz? – NRitH

+0

@NRitH kısıtlaması, metnin uzunluğu ne olursa olsun her zaman kırılır. Etiketin satır sayısını değiştiremiyorum, metnin kesilmesi gerekiyor. – emenegro

+0

Tam bir günlüğü ve bozuk kısıtlama hakkında şikayet ettiğinde yığın izini kaydeder misiniz? İçeriği önceliğe ve etiketin sıkıştırma direncine göre ayarlamazsanız ne olur? –

cevap

5

(aslında gayet iyi çalışıyor) benim kodudur:

UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)]; 
topView.backgroundColor = [UIColor redColor]; 
topView.translatesAutoresizingMaskIntoConstraints = NO; 

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 40, 160)]; 
imageView.backgroundColor = [UIColor greenColor]; 
imageView.translatesAutoresizingMaskIntoConstraints = NO; 
[topView addSubview:imageView]; 

self.label = [[UILabel alloc] initWithFrame:CGRectMake(80, 80, 200, 32)]; 
self.label.backgroundColor = [UIColor yellowColor]; 
self.label.text = @"some text"; 
self.label.translatesAutoresizingMaskIntoConstraints = NO; 
[topView addSubview:self.label]; 


self.tableView.tableHeaderView = topView; 

NSDictionary *views = @{@"imageView":imageView, @"label":self.label}; 

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-margin-[imageView(40)]-(>=margin)-[label]-margin-|" options:0 metrics:@{@"margin": @30} views:views]; 
NSArray *imageConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[imageView(160)]-20-|" options:0 metrics:nil views:views]; 
NSArray *textConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[label]" options:0 metrics:nil views:views]; 
NSArray *topConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[topView(320)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(topView)]; 

[topView addConstraints:constraints]; 
[topView addConstraints:imageConstraints]; 
[topView addConstraints:textConstraints]; 
[topView addConstraints:topConstraints]; 

Ben ana sorun ( UIView-Encapsulated-Layout üreten translatesAutoresizingMaskIntoConstraints kapatmak kalmamasıdır düşünüyorum ki ben 'iOs8'den önce hiç karşılaşmadım. İyi belgelenmiş bir yer bulamadım, ancak bu kısıtlama ile ilgili birçok soru var.

Ben de github repo oluşturduk, böylece kendiniz deneyebilirsiniz: https://github.com/Nikita2k/constraintsTest

Ayrıca, WWDC2014 videoya göz alabilir - Tablo yenilikler ve Toplama Görüntüleme (~ 20dk) Ne. Şu anda UIView-Encapsulated-Layout sorununu görebilecek bir kaç bilgi var. Fakat daha sonra düzeltilecek. Bu particullar durumda yardımcı ya da değil, ama bir çok deneyin verecektir Ayrıca, film şeridinden rowHeight iOS8 tüm olarak tableViews ile oynamaya deneyebilirsiniz (veya xib) açıkça

self.tableView.rowHeight = UITableViewAutomaticDimension 

emin değilim belirlesin !

İlgili konular