UIScrollView contentInset özelliği ne için?


158

Birisi bana bir UIScrollViewörnekte contentInset özelliğinin ne için kullanıldığını açıklayabilir mi? Ve belki bir örnek verebilir misiniz?

Yanıtlar:


240

İç metinlerin içerik görünümü ile kapalı kaydırma görünümü arasındaki mesafesini ayarlar.

Obj-Cı

aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);

Swift 5.0

aScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 7.0)

İşte bilgilendirici bir ekran görüntüsü olan kaydırma görünümleriyle ilgili iyi bir iOS Referans Kütüphanesi makalesi (şek 1-3) - Burada metin yoluyla çoğaltacağım:

  _|←_cW_→_|_↓_
   |       | 
---------------
   |content| ↑
 ↑ |content| contentInset.top
cH |content|
 ↓ |content| contentInset.bottom
   |content| ↓
---------------
  _|_______|___ 
             ↑


   (cH = contentSize.height; cW = contentSize.width)

Kaydırma görünümü, içerik görünümünü ve belirtilen içerik ekleri tarafından sağlanan dolguları kapsar.


UIScrollView'a bir dolgu eklemek için kullanılır mı? Değilse bana pratik bir örnek verebilir misiniz? Benim sorunum nasıl uygulanacağı değil, ne zaman uygulanacağı.
ForeignerBR

28
Evet, içeriği kaydırma görünümünün içine doldurur. CSS paddingözelliğine benziyor .
Marc W

Bu konuda bindirme için üzgünüm, kendi sorusunu taşıyabilirim, ancak buna dayanarak, her contentInset değerini örneğin contentHeight dışında 0'a ayarlarsanız gerçekte ne olur? Bu, tüm kaydırma görüntüsünü ayarladığınız yükseklik olmaya zorluyor mu?
jakev

@jakev Hayır, .frame özelliği üst görünümdeki scrollview boyutlarını kontrol eder (Şu cevaba bakınız: stackoverflow.com/questions/5361369/… ). Tüm taraflar için 0'a ayarlar, içeriğin kaydırma görünümünde hiç doldurulmayacağı anlamına gelir. Bu nedenle, en üste kaydırdığınızda, içerik sağa doğru kaydırma görüntüsünün üstüne oturur. En alta kaydırırsanız, içerik kaydırma görüntüsünün en altına kadar ulaşır.
Jeremy Wiebe

Mümkün olsa bile her zaman kaydırma üst scrollview ait (contenInset) için Marin tutmak her zaman contentInset tutmaya edilir
Chlebta

86

Jball'un cevabı içerik eklerinin mükemmel bir açıklaması olsa da, ne zaman kullanılacağı sorusuna cevap vermez. Diyagramlarından ödünç alacağım:

  _|←_cW_→_|_↓_
   |       | 
---------------
   |content| ↑
 ↑ |content| contentInset.top
cH |content|
 ↓ |content| contentInset.bottom
   |content| ↓
---------------
   |content|    
-------------↑-

Bunu yaptığınızda elde edeceğiniz şey budur, ancak yararlılığı yalnızca kaydırma yaptığınızda gösterilir:

  _|←_cW_→_|_↓_
   |content| ← content is still visible
---------------
   |content| ↑
 ↑ |content| contentInset.top
cH |content|
 ↓ |content| contentInset.bottom
   |content| ↓
---------------
  _|_______|___ 
             ↑

Üstteki içerik satırı, hala kaydırma görünümü çerçevesinin içinde olduğu için görünmeye devam edecektir. Üst ofseti düşünmenin bir yolu, "en üste kaydırdığımızda içeriği kaydırma görünümünde ne kadar aşağı kaydırmamız" dır.

Bunun gerçekten kullanıldığı bir yeri görmek için iphone'daki yerleşik Fotoğraflar uygulamasına bakın. Gezinme çubuğu ve durum çubuğu saydamdır ve kaydırma görünümünün içeriği altında görünür. Çünkü kaydırma görünümünün çerçevesi o kadar uzar. Ancak içerik eki olmasaydı, içeriğin üst kısmına kadar gittiğinizde asla içeriğin üst kısmının şeffaf gezinme çubuğunu temizlemesini sağlayamazsınız.


Buradaki güzel şey, "bulanıklıkla durum çubuğunun altında kaydırma" efekti oluşturmak için ekleri kullanabilmenizdir.
TheEye

Fotoğraflar uygulaması ile ilgili örnek anlaması kolaydı.
abhimuralidharan

8

İçerik ekleri, Kullanıcı Arayüzünün diğer bölümlerinin altına inen ancak kaydırma çubukları kullanılarak erişilebilir durumda olan içeriğe sahip olma sorununu çözer. Başka bir deyişle, İçerik Eklentisinin amacı etkileşim alanını gerçek alanından daha küçük yapmaktır.

Ekranın üç mantıksal alanına sahip olduğumuzu düşünün:

TOP BUTTONS

TEXT

BOTTOM TAB BAR

ve METİN'in ÜST DÜĞMELER altında hiçbir zaman saydam olarak görünmemesini istiyoruz, ancak Metnin BOTTOM SEKME ÇUBU'nun altında görünmesini ve yine de BOTTOM SEKME ÇUBU'nun altında şeffaf olarak oturan metni güncelleyebilmemizi istiyoruz.

Daha sonra üst menşei ÜST DÜĞMELER altında olacak şekilde ve yüksekliği ALT SEKME ÇUBUĞU'nun tabanını içerecek şekilde ayarlayacağız. ALT SEKME ÇUBUĞU içeriğinin altında oturan Metne erişim elde etmek için, alt gömleği ALT SEKME ÇUBUĞU'nun yüksekliği olarak ayarlayacağız.

İç metin olmadan, kaydırma çubuğu içeriği yazabileceğiniz kadar yukarı kaydırmanıza izin vermez. İç metin ile, içeriğin içerik iç metin boyutunun fazladan "BOŞ İÇERİĞİ" olması gibi. Boş metin, gerçek "içeriğe" eklenmiştir - bu şekilde kavramı hatırlıyorum.


4

İçine dolgu eklemek için kullanılır UIScrollView

Olmadan contentInset, tablo görünümü şu şekildedir:

resim açıklamasını buraya girin

Sonra ayarlayın contentInset:

tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

Etkisi aşağıdaki gibidir:

resim açıklamasını buraya girin

Daha iyi görünüyor, değil mi?

Ve incelemek için bir blog yazıyorum contentInset, eleştiri hoş geldiniz.


2

Harika bir soru.

Aşağıdaki örneği düşünün ( scrollerbir UIScrollView):

float offset = 1000;
[super viewDidLoad];
for (int i=0;i<500; i++) {
    UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease];
    [label setText:[NSString stringWithFormat:@"label %d",i]];
    [self.scroller addSubview:label];
    [self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)];
    [self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)];
}

Ekler, kaydırıcıyı istediğiniz içerik üzerinde bir "pencere" bulundurmaya zorlamanın SADECE yoludur. Hala bu örnek kod ile uğraşmak, ama fikir var: bir "pencere" almak için insets kullanın UIScrollView.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.