2015-05-07 11 views
15

Uygulamalarımda çoğu durumda animasyonlu birçok kısıtlama ile çalışıyorum. Bazı durumlarda kısıtlamaları kaldırmam ve yenilerini eklemem gerek.Bir NSLayoutConstraint öğesinin silinmesi için doğru yol

iOS 7'yi de desteklemem gerektiğinden, benim için başka bir çözüm olan active özelliğini kullanamıyorum.

Kısıtlamaları kaldırma yolu, UIView numaralı telefondan removeConstraint yöntemini kullanmaktır.

o yüzden kısıtlaması üzerinde ilgileniyor hangi görünümün bilmek zorunda değilsiniz

constraint.remove() 

gibi bir yöntem oluşturmak mümkün mü?

cevap

5

I PureLayout kitaplığı tarafından sağlanan yöntem autoRemove kullanılarak erdi.

Bu bir astar sonuçlandı:

containerTopConstraint.autoRemove() 
0

Hayır, farkında olduğumu değil. Ana makine görünümünün otomatik yönetimi yalnızca iOS8'de geldi.

Çirkin bir uygulama, tüm görünümlerin tüm kısıtlamalarının üzerinde bulunduğu görünümün dışına dönebilir.

Ancak normal olarak kısıtlamaları, hangi görünümde tanımlandığını bildiğiniz şekilde yönetmek zor olmamalı.

+0

Eh, bu doğru. Biliyorum iki görüşten biri. Ama her seferinde ifadeler yazmak istemiyorum. Bunun için temiz bir çözüm olması daha güzel olurdu. – Antoine

14

Ne yapmam eklemem/çıkarmak sadece aşağıdaki kullanabilmek için isteyen kısıtların diziler yaratmaktır:

@property NSMutableArray *newConstraints; 

newConstraints

iOS7 ve iOS8 doldurun:

[self.viewToChange addConstraints:self.newConstraints]; 
[self.viewToChange removeConstraints:self.newConstraints]; 

veya iOS8 sadece yeni bir mekanizma

[NSLayoutConstraint activateConstraints:self.newConstraints]; 
[NSLayoutConstraint deactivateConstraints:self.newConstraints]; 
kullanmak

Bununla birlikte, bir set uygulayabilir, grubu kaldırabilir ve yeni bir set uygulayabilirsiniz.

Hangi kısıtlamaların hangileri olduğunu tanımlayabilmeniz için ilk listeyi set tahtası setinden de oluşturabilirsiniz. https://github.com/smileyborg/PureLayout

Bu yöntem firstItem veya secondItem kullanılarak commonSuperview bulur ve doğru görünümden kısıtlama kaldırır:

+0

Bu benim sorunum değil. 'ViewToChange' problemdir, çünkü her zaman hangi bakış açısının kısıtlamaları önemsediğini bilmiyorum. Bu yüzden sadece 'constraint.remove() ' – Antoine

+0

Özür dilemelerini, yanlış anlaşıldığını söylemek istiyorum. Bir çözüm, bir sözlükteki önemli olan tüm sınırlamaları anahtar olarak "tanımlayıcısı" nı kullanarak ve değer olarak görüntülemektir. Geçerli görünümü daha sonra tanımlayıcıya bakarak bulabilirsiniz. El ile kodlanmış kısıtlamalar için tanımlayıcıyı kod olarak ayarlayabilirsiniz. Bunu IB'den de ayarlayabilirsiniz: bkz. Http: // stackoverflow.com/questions/27791597/var-bir-add-bir-tanımlayıcı-otomatik-düzen-kısıtlamalar-in-interface-buil –

+0

Kısıtlama bulmak için bu tanımlayıcıyı kullanabilirdim, ama nasıl yaparım Bu tanımlayıcıyı kullanarak doğru görünümü buldunuz mu? – Antoine