Artık, Arayüz Oluşturucu, belirli bir cihazın boyutunu simüle etmek için kullanıcının film şeridindeki her görüntü denetleyicisinin boyutunu dinamik olarak değiştirmesine izin veriyor.
Bu işlevsellikten önce, kullanıcı her bir görünüm denetleyicisi boyutunu manuel olarak ayarlamalıdır. Böylece, görüntü denetleyicisi, initWithCoder
başlangıç karesini ayarlamak için kullanılan belirli bir boyutta kaydedildi .
Şimdi, initWithCoder
film şeridinde tanımlanan boyutu kullanmadığı ve görüntü denetleyici görünümü ve tüm alt görünümleri için 1000x1000 piksellik bir boyut tanımladığı görülüyor.
Bu bir sorun değil, çünkü görünümler her zaman şu düzen çözümlerinden birini kullanmalıdır:
otomatik düzen ve tüm kısıtlamalar görünümlerinizi doğru bir şekilde düzenleyecektir
autoresizingMask, herhangi bir kısıtlama eklenmemiş her görünümü düzenleyecek ( unutmayın otomatik düzen ve kenar boşluğu kısıtlamaları artık aynı görünümde uyumludur \ o /! )
Ancak bu , görünüm katmanıyla ilgili tüm düzen öğeleri için bir sorundur cornerRadius
, çünkü ne otomatik düzen ne de otomatik yeniden boyutlandırma maskesi katman özelliklerine uygulanmaz.
Bu soruna cevap vermenin yaygın yolu, viewDidLayoutSubviews
kontrol cihazındaysanız veya layoutSubview
bir görünümdeyseniz kullanmaktır. Bu noktada ( super
göreceli yöntemlerini çağırmayı unutmayın ), tüm düzen işlerinin yapıldığından oldukça eminiz!
Oldukça emin? Hum ... tam olarak değil, belirttim ve bu yüzden bu soruyu sordum, bazı durumlarda görüş hala bu yöntemde 1000x1000 boyutunda. Kendi sorumun cevabı olmadığını düşünüyorum. Bununla ilgili maksimum bilgi vermek için:
1- Bu sadece hücreleri yerleştirirken olur! In UITableViewCell
& UICollectionViewCell
alt sınıflar, layoutSubview
çağrılmayacaktır sonra subviews doğru dışarı koydu olacaktır.
2- @EugenDimboiu'nun belirttiği gibi (lütfen sizin için yararlıysa cevabını destekleyin), yerleştirilmemiş alt görünümü çağırmak [myView layoutIfNeeded]
, tam zamanında doğru bir şekilde düzenleyecektir.
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel);
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel);
}
3- Bence bu kesinlikle bir hata. Radara gönderdim (id 28562874).
Not: Anadili İngilizce değilim, bu yüzden dilbilgimin düzeltilmesi gerekiyorsa gönderimi düzenlemekten çekinmeyin;)
Not2: Daha iyi bir çözümünüz varsa, başka bir yanıt yazmamaktan çekinmeyin. Kabul edilen cevabı değiştireceğim.