Для чого властивість UIScrollView contentInset?


158

Чи може хтось пояснити мені, для чого використовується властивість contentInset в UIScrollViewекземплярі? А може, навести приклад?

Відповіді:


240

Він встановлює відстань вставки між поданням вмісту та поданням прокрутки, що додається.

Obj-C

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

Швидкий 5.0

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

Ось хороша стаття Довідкова бібліотека iOS про види прокрутки, яка має інформативний скріншот (рис. 1-3) - я повторюю її через текст тут:

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


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

У вікні прокрутки додається подання вмісту, а також те, що додаткові додаткові вставки містять.


це використовується для додавання прокладки до UIScrollView тоді? Якщо ви не можете, ви можете надати мені практичний приклад. Моя проблема полягає не в тому, як це реалізувати, а в тому, коли його здійснити.
ForeignerBR

28
Так, він розміщує вміст у внутрішній частині подання прокрутки. Це схоже з paddingвластивістю CSS .
Marc W

Вибачте, з цього приводу, я можу перенести його власне запитання, але виходячи з цього, що насправді відбувається, якщо встановити для кожного значення contentInset 0, крім contentHeight, наприклад? Чи змушує це перегляд прокрутки бути висотою, яку ви встановили?
jakev

@jakev Ні, властивість .frame контролює розміри прокрутки в своєму батьківському (див. цю відповідь: stackoverflow.com/questions/5361369/… ). Встановлення contentInsets на 0 для всіх сторін просто означає, що вміст взагалі не буде прокладений у межах прокрутки. Таким чином, коли ви прокручуєте до вершини, вміст сидить прямо вгорі екрана прокрутки. Якщо ви прокручуєте донизу, вміст сягає праворуч донизу перегляду прокрутки.
Джеремі Вібе

чи можна зберігати contentInset завжди, навіть при прокручуванні завжди залишайте привершеним (contenInset) scrollView
Chlebta

86

Хоча відповідь jball є чудовим описом вмісту вставки, вона не відповідає на питання, коли її використовувати. Я запозичу його діаграми:

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

Це те, що ви отримуєте, коли це робите, але корисність цього виявляється лише під час прокрутки:

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

Цей верхній рядок вмісту все ще буде видно, оскільки він все ще знаходиться у кадрі вікна прокрутки. Один із способів подумати про верхнє зміщення - "на скільки змістити вміст вниз на подання прокрутки, коли ми прокручуємося до вершини"

Щоб побачити місце, де це фактично використовується, подивіться на вбудований додаток Фотографії на iphone. Панель навігації та рядок стану прозорі, а вміст подання прокрутки видно внизу. Це тому, що рамка подання прокрутки розширюється настільки далеко. Але якби не вставка вмісту, ви ніколи не змогли б мати верхню частину вмісту чистою прозорою панеллю навігації, коли ви проходите весь шлях до верху.


Приємним є те, що ви можете використовувати вставки, щоб створити ефект "прокрутки під рядком стану з розмиттям".
TheEye

Приклад про додаток про фотографії було легко зрозуміти.
абхімуралідхаран

8

Вставки вмісту вирішують проблему наявності вмісту, який знаходиться під іншими частинами Інтерфейсу користувача, але все ще залишається доступним за допомогою смуг прокрутки. Іншими словами, мета вмісту вмісту - зробити область взаємодії меншою, ніж її фактична область.

Розглянемо випадок, коли у нас є три логічні області екрана:

TOP BUTTONS

TEXT

BOTTOM TAB BAR

і ми хочемо, щоб ТЕКСТ ніколи не відображався прозоро під основними кнопками, але ми хочемо, щоб Текст відображався під смужкою ТАБЛИЧНОЇ ТАБЛИЦІ, і все ж дозволяв прокручувати, щоб ми могли оновити текст, що сидить прозоро під БАРОМ ТАБОЛЬНОГО ТАБЛОТА.

Тоді ми встановимо верхнє джерело, щоб воно було нижче ТОП КНОПКИ, а висота, щоб включати нижню частину BOTTOM TAB BAR. Щоб отримати доступ до тексту, що знаходиться під вмістом BOTTOM TAB BAR, ми встановимо нижню вставку як висоту BARTOM TAB BAR.

Без вставки прокрутка не дозволить вам прокручувати вміст, достатній для введення в нього. Що стосується вставки, це як би вміст мав додатковий "BLANK CONTENT" розмір вкладеного вмісту. Пустий текст був "вставлений" у реальний "зміст" - саме так я запам’ятав цю концепцію.


4

Він використовується для додавання прокладки UIScrollView

Без contentInsetцього подання таблиці виглядає так:

введіть тут опис зображення

Потім встановіть contentInset:

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

Ефект такий:

введіть тут опис зображення

Здається, краще, правда?

І я пишу блог для вивчення contentInset, критика вітається.


2

Чудове запитання.

Розглянемо наступний приклад ( scrollerце 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)];
}

Вставки - це ТІЛЬКИ спосіб змусити ваш скроллер мати "вікно" на вміст, де ви цього хочете. Я все ще псуюся з цим зразковим кодом, але ідея є: використовуйте вставки, щоб отримати "вікно" на своєму UIScrollView.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.