2016-04-04 9 views
0

Film şeridimde etiketler, metin alanları ve düğmelerle ilgili bir görünüm var, bir düğmeyi tıklattığımda Swift'in bazı textfields ve etiketlerinin kaybolduğunu istiyorum.Ui bileşenlerini nasıl gizleyebilir veya kaldırabilirim ve diğerini gizli alanın yerini kaplayabilir veya silebilirim?

self.btnLoginFB.hidden = true 
self.btnLoginFB.removeFromSuperview() 

ama uzay işgal ediliyor üzerinde gidip kaldırmaya çalışırsanız, tüm diğer bileşenler storyboard dışında başka uzaya gitmek alanını gizlemek eğer.

Ben postu div yeterlidir html, emin olmak için ihtiyaç Lütfen ama film şeridindeki bilmiyorum :(tüm yardımlarınız için

teşekkür ederiz.

+0

iOS 9'u hedefliyorsanız, UIStackViews; Bir öğe gizlendiğinde otomatik olarak ayarlanırlar, aksi takdirde kısıtlamalarınızı manipüle etmeniz gerekir ki gizli öğenin sıfır yüksekliği – Paulw11

+0

otomatik düzende çalışıyor mu? –

+0

UIStackView kullanarak, düzeltildi. Paulw11 –

cevap

0

sizi varsayarsak kullanıyoruz Autolayout, alanın gizlenmesi, fark ettiğiniz gibi, içerdiği alanı doldurmaz. Bu alan boş bırakılır.Görünümden kaldırıldığında, her türlü rastlantısal şeyler meydana gelir.

İşte bu görevi nasıl yapacağım Autolayout ile alanı doğru bir şekilde doldurmak istediğinizde (örneğin, View A, B Görünümünün üzerindeyse, View B'nin üstünü x kenar boşluğu olarak ayarlayın om A'yı görüntüleyin.) Sonra görünümü gizleyebilir ya da saklayamazsınız (genellikle akıl sağlığı için yapıyorum) ve en önemli kısım Görünüm A'nın yüksekliğini 0 olarak ayarlamamdır. Genelde bunu, Görünüm'deki sabiti manipüle ederek yapıyorum. A yüksekliği sınırlaması, ancak yüksekliğiniz 0'a gittiği sürece yüksekliği de 0 olarak değiştirebilirsiniz.

Eğer Autolayout'u doğru şekilde ayarladıysanız, bu, boşluğu doldurmak için yukarıdaki veya altındaki tüm görünümleri doğru bir şekilde hareket ettirecektir. Görüşlerinizi birbirinizle nasıl ilişkilendiriyorsunuz? Herhangi bir sorunuz olursa haberim olsun.

Düzenleme: Bu nedenle, genellikle bir kısıtlama gizleyeceğimi biliyorsam, genellikle yükseklik sınırım için bir mülkte kalacağım, bu yüzden genellikle yapacağım şey (A görünümünü gizlemek için):

viewA.hidden = YES; 
heightConstraint.constant = 0; 
[viewA setNeedsDisplay]; 

sadece yüksekliğini değiştirmek için:

viewA.hidden = YES; 
CGRect newFrame = viewA.frame; 
newFrame.size.height = 0; 
viewA.frame = newFrame; 
[viewA setNeedsDisplay]; 

setNeedsDisplay çağrısı gereksiz olabilir, ama aslında o kadar emin değilim bu okullara yardımcı değilim, sana bunu gerektiğini düşünüyorum senaryo 1 ve senaryo 2'de buna gerek yok.

Ayrıca, bu şekilde kutunun dışında çalışabilmeniz için View B'nin, A'yı üstten veya alt kenarına sabitlenecek şekilde ayarlandığından emin olmanız gerekir; böylece, geride kalan alanı otomatik olarak dolduracaktır. Autolayout'u kullanmıyorsanız, View B için doğru çerçeveyi kendiniz hesaplamanız ve View A'yı gizledikten sonra ayarlamanız gerekir.

+0

Lütfen bana bir örnek gösterebilirsin, çünkü söylediğim şeyi deniyorum ve işe yaramıyor. –

+0

Her iki yoldan bazı kod parçacıklarını eklemek için cevabımı yeni güncelledim. Başka sorularınız olursa haberim olsun! –

+0

Ayrıca bir UIView animasyon bloğundaki "setNeedsLayout" çağrısını da – Paulw11

İlgili konular