IB'de, bir kaydırma görünümünde dikey kaydırmanın işaretini kaldırma seçeneği vardır, ancak işe yaramıyor gibi görünüyor.
Kaydırma görünümü, IB yerine kodda dikey olarak değil, yalnızca yatay olarak kaydırılacak şekilde nasıl ayarlanabilir?
IB'de, bir kaydırma görünümünde dikey kaydırmanın işaretini kaldırma seçeneği vardır, ancak işe yaramıyor gibi görünüyor.
Kaydırma görünümü, IB yerine kodda dikey olarak değil, yalnızca yatay olarak kaydırılacak şekilde nasıl ayarlanabilir?
Yanıtlar:
ContentSize'ın yüksekliğini scrollView yüksekliğine ayarlamayı deneyin. Daha sonra dikey kaydırma devre dışı bırakılmalıdır çünkü dikey olarak kaydırılacak hiçbir şey olmayacaktır.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
iOS7'den beri:
ilk: içerik boyutu genişliği, kaydırma görünümünüzün genişliğine eşit olmalıdır
saniye: initWithNibName'inizde:
self.automaticallyAdjustsScrollViewInsets = NO;
Bu kadar.
evet, pt2ph8'in cevabı doğru,
ancak garip bir nedenden dolayı contentSize'nizin UIScrollView'den daha yüksek olması gerekiyorsa, UIScrollView protokol yöntemini uygulayarak dikey kaydırmayı devre dışı bırakabilirsiniz.
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
sadece bunu UIViewController'ınıza ekleyin
float oldY; // here or better in .h interface
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
// or if you are sure you wanna it always on top:
// [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}
bu sadece kullanıcı UIScrollView'unuzu kaydırdığında çağrılan yöntemdir ve bunu yaparak içeriğini her zaman aynı olmaya zorlarsınız.
float oldY;
yukarıdaki koda bakın gibi .m dosyasında BİLDİRMEYİN . Bu, uygulama başına C-tarzı bir değişken sembolüdür, değişken, denetleyici sınıfının bir örnek üyesi olarak bildirilmelidir ZORUNLU.
Aşağıdaki yöntemi dahil edin
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
ve kaydırma görünümünün içerik boyutu genişliğini kaydırma görünümünün genişliğine eşit olacak şekilde ayarlayın.
İstediğiniz yönde devre dışı bırakmak için içerik boyutunda 0'ı geçmeniz gerekir.
Dikey kaydırmayı devre dışı bırakmak için
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
Yatay kaydırmayı devre dışı bırakmak için
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
Dikey kaydırmayı devre dışı bırakmak için içerik boyutunu güncelledim ve kaydırma özelliği devam etti. Sonra kaydırmayı tamamen devre dışı bırakmak için dikey sıçramayı da devre dışı bırakmam gerektiğini anladım.
Belki bu sorunu olan insanlar da vardır.
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
onaylamış olmalısın UIScrollViewDelegate
aScrollView.delegate = self;
Sadece y'yi her zaman en üstte olacak şekilde ayarlayın. UIScrollViewDelegate ile uyumlu olması gerekir
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
Bu, kaydırmanın Yavaşlama / Hızlanma etkisini koruyacaktır.
İOS 11'de, güvenli bir alan yerine ekran sınırlarına yapışan bir kaydırma görünümü oluşturmakla ilgileniyorsanız, lütfen aşağıdakileri eklemeyi unutmayın:
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
Gönderen iOS11 biri şu özelliğini kullanabilirsiniz
let frameLayoutGuide: UILayoutGuide
FrameLayoutGuide.topAnchor ve frameLayoutGuide.bottomAnchor için, scrollView'unuzun bazı alt görünümlerinin aynı bağlantılarına kısıtlamalar ayarlarsanız , dikey kaydırma devre dışı bırakılır ve scrollView'in yüksekliği, alt görünümünün yüksekliğine eşit olur.
En bariz çözüm, alt sınıfınızda y koordinatı değişikliklerini yasaklamaktır.
override var contentOffset: CGPoint {
get {
return super.contentOffset
}
set {
super.contentOffset = CGPoint(x: newValue.x, y: 0)
}
}
Aşağıdaki durumlarda tek uygun çözüm budur:
Bir çok cevap, contentOffset
0 olarak ayarlamayı içerir . ScrollView içindeki görünümün ortalanmasını istediğim bir durum vardı. Bu benim için işi yaptı:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}