2015-01-06 20 views
15

Yeni bir uygulama yapıyorum ve bir "Welcome walkthrough" başlangıcında, bir UIPageViewController'da sunulan bir dizi görüntü içeren bir storyboard'um var. Görüntüleri yükledim ve bunların hepsini sadece güzel, ancak "önceki" veya "sonraki" ViewController'ın ötesine geçtiğinde görüntüler yeniden boyutlandırılıyor. Gelişmek için Swift kullanıyorum. İşte UIImageView yeniden boyutlandırma sorunu UIPageViewController'da

bir konunun videodur: http://youtu.be/dXcjjT-8Bk0

farklı Görünüm Modları'nın denedim (Aspect uyum, boy dolgu, yeniden çizme vs.) ve hepsi aynı davranırlar.

Farklı ekran boyutları için geliştirmeyi kolaylaştırmak amacıyla Otomatik Düzen + Boyut Sınıfları kullanıyorum. UIImage yapmak Ben şimdiki kısıtlamalar doğru boyutta görünür şunlardır: Şu anda onların 'yeniden boyutlandırma davranışını' yaptıktan sonra (bana doğru görüntü veren Aspect Fit kullanıyorum

Align Centre X to Superview 
Top Space to Top Layout Guide 
Bottom Space to Bottom Layout Guide + Equals: 50 

Can. Herkes bu sorunu düzeltmek için bana nasıl yardımcı olur?

cevap

14

Videonuzdan, UIImageView'unuzun her zaman en üstte "yeniden boyutlandırıldı" olduğunu farkettim. Bu kesinlikle sizin otomatik arama kısıtlamalarınızdan kaynaklanıyor " En İyi Yerleşim Düzeni Kılavuzu. "UIImageView'unuzun görünümü denetleyici, kaydırma sayfası görünümü denetleyicinizden geçiyor, üst düzen kılavuzunun nerede olduğunu bilmiyor, yani topLayoutGuide.length, 0. Sadece animasyon tamamlandıktan sonra, görüntü denetleyici topLayoutGuide.length için pozitif bir değer alır. Evet, sayfa görüntüleme denetleyicisi bundan daha akıllı olmalı ama değil.
Üstten görünüm kılavuzunu kullanmayı bırakabilir ve süper görünümünün üst kısmına göre otomatik yayın kısıtlaması yapabilirsiniz. Veya, en üst düzen kılavuzunu kullanmaya devam edebilirsiniz ancak length, 0 olduğu zaman hesaba katılabilir. durum çubuğunda varsayarak, bu her zaman üst düzen kılavuzunda adresinden UIImageView tepesini koyacağız

@IBOutlet weak var topSpaceToTLG: NSLayoutConstraint! 
var parentTLGlength: CGFloat = 20 

override func viewWillLayoutSubviews() { 
    if self.topLayoutGuide.length == 0 { 
     // Lengthen the autolayout constraint to where we know the 
     // top layout guide will be when the transition completes 
     topSpaceToTLG.constant = parentTLGlength 
    } else { 
     topSpaceToTLG.constant = 0 
    } 
} 

: Eğer ViewController içeren senin UIImageView s sizin film şeridi en NSLayoutConstraint ve ağır basan viewWillLayoutSubviews() için bir çıkış yaparak bunu yapabilirsiniz her zaman 20 puandır. Alt görünümleri yerleştirmeden önce, üst düzen kılavuz uzunluğunun 0 olup olmadığını kontrol edecek veya otomatik olarak kısıtlama ayarlarınızı buna göre ayarlayacaktır. Geçiş animasyonu tamamlandıktan sonra, düzen tekrar tetiklenir ve üst düzen kılavuz uzunluğu beklenen değer olacaktır, bu nedenle kısıtlama sabiti 0'a geri dönebilir. Sabit kodlamadan bile daha iyi olan değer, başlatma sırasında ana görünüm denetleyicisinin tam uzunluğunu geçmek, üst çubuk kılavuzunda gezinme çubuğu eklemek gibi olası değişiklikleri yapmaktır.

+1

Başkasının bu sorunu yaşıyor musunuz? Bu benim için çalışmadı. Arka planda tam ekran görüntüsü var ve bunu hala yapıyor. –

+0

Bu ne yazık ki rotasyonu hesaba katmıyor: bir telefondaki manzarada, üst düzen kılavuzunun uzunluğu _properly_ 0'dır. Ebeveyn VC'nin kılavuz uzunluğunu bulmak tek çözüm gibi görünüyor. –

1

Videodan, UIPageViewController'ın üst çubukların altına uzanmasını engelleyerek bunu çözebileceğinizi düşünüyorum.

Xcode'ta bunu, üst çubukların altındaki kenarları genişletme seçimini kaldırarak sayfa görüntüleme denetleyicisi için öznitelik denetçisini kullanarak yapabilirsiniz.

Bu durum, durum çubuğunun altında arama yapmasını engelleyecektir.

+0

Bu kendim denedim ama işe yaramadı. – jason328

1

benim sorun görünümü denetleyicisi animasyon başladığında Üst ve Alt Düzen Kılavuzları hiçbir yükseklik vardı anladım. Sağ ve sol kenar boşlukları da yoktu. Görünüm animasyonunu tamamladığında hepsi bir yükseklik veya genişlik aldı ve görünümüm kendini yeniden boyutlandırdı. Bu sorunu projemde, nesnelerim ile Üst/Alt Düzen Kılavuzu yerine süper görünümleri arasında dikey kısıtlamalar ekleyerek düzelttim. Yan kenar boşluklarını görmezden gelmek için yatay kısıtlamalarımı değiştirmek zorunda kaldım.

ben rastladım geçen konu, duruma kendim bar hesaba zorunda olmasıdır. Olabilir veya olmayabilir ya da siz Maps kullanırken gibi çifte bar olabilir.

İlgili konular