İş mantığına bağlı olarak UIViews
, çoğu zaman göstermek / gizlemek oldukça yaygın bir paradigma gibi hissediyorum UILabels
. Benim sorum, gizli görünümlere kendi çerçeve 0x0 gibi yanıt vermek için AutoLayout kullanarak en iyi yolu nedir. İşte 1-3 özellikten oluşan dinamik bir listeye bir örnek.
Şu anda düğmeden son etikete kadar 10px'lik bir üst alanım var, bu da etiket gizlendiğinde yukarı kaymayacak. Şu an itibariyle, bu kısıtlamaya bir çıkış oluşturdum ve kaç etiketi görüntülediğime bağlı olarak sabiti değiştirdim. Düğmeyi gizli karelerin üzerinde yukarı itmek için negatif sabit değerler kullandığım için bu açıkçası biraz acayip. Aynı zamanda kötü çünkü gerçek mizanpaj öğeleriyle sınırlandırılmıyor, sadece bilinen yüksekliklere / diğer unsurların dolgusuna dayanan sinsi statik hesaplamalar ve AutoLayout'un ne için üretildiğine karşı savaşıyor.
Açıkçası sadece dinamik etiketlerime bağlı olarak yeni kısıtlamalar yaratabilirdim, ancak bu, bazı boşlukları daraltmaya çalışmak için çok fazla mikro yönetim ve çok fazla ayrıntı. Daha iyi yaklaşımlar var mı? Çerçeve boyutunu 0,0 değiştirme ve AutoLayout'un sınırlamaların manipülasyonu olmadan işini yapmasına izin verme? Görünümler tamamen kaldırılsın mı?
Dürüst olmak gerekirse, sadece gizli görünümün bağlamından sabiti değiştirmek, basit hesaplama ile tek bir kod satırı gerektirir. İle yeni kısıtlamalar yeniden oluşturmak constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
çok ağır görünüyor.
Şubat 2018'i düzenle : Ben'in UIStackView
s