Чи може хтось пояснити мені, для чого використовується властивість contentInset в UIScrollView
екземплярі? А може, навести приклад?
Чи може хтось пояснити мені, для чого використовується властивість contentInset в UIScrollView
екземплярі? А може, навести приклад?
Відповіді:
Він встановлює відстань вставки між поданням вмісту та поданням прокрутки, що додається.
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)
У вікні прокрутки додається подання вмісту, а також те, що додаткові додаткові вставки містять.
padding
властивістю CSS .
Хоча відповідь 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. Панель навігації та рядок стану прозорі, а вміст подання прокрутки видно внизу. Це тому, що рамка подання прокрутки розширюється настільки далеко. Але якби не вставка вмісту, ви ніколи не змогли б мати верхню частину вмісту чистою прозорою панеллю навігації, коли ви проходите весь шлях до верху.
Вставки вмісту вирішують проблему наявності вмісту, який знаходиться під іншими частинами Інтерфейсу користувача, але все ще залишається доступним за допомогою смуг прокрутки. Іншими словами, мета вмісту вмісту - зробити область взаємодії меншою, ніж її фактична область.
Розглянемо випадок, коли у нас є три логічні області екрана:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
і ми хочемо, щоб ТЕКСТ ніколи не відображався прозоро під основними кнопками, але ми хочемо, щоб Текст відображався під смужкою ТАБЛИЧНОЇ ТАБЛИЦІ, і все ж дозволяв прокручувати, щоб ми могли оновити текст, що сидить прозоро під БАРОМ ТАБОЛЬНОГО ТАБЛОТА.
Тоді ми встановимо верхнє джерело, щоб воно було нижче ТОП КНОПКИ, а висота, щоб включати нижню частину BOTTOM TAB BAR. Щоб отримати доступ до тексту, що знаходиться під вмістом BOTTOM TAB BAR, ми встановимо нижню вставку як висоту BARTOM TAB BAR.
Без вставки прокрутка не дозволить вам прокручувати вміст, достатній для введення в нього. Що стосується вставки, це як би вміст мав додатковий "BLANK CONTENT" розмір вкладеного вмісту. Пустий текст був "вставлений" у реальний "зміст" - саме так я запам’ятав цю концепцію.
Він використовується для додавання прокладки UIScrollView
Без contentInset
цього подання таблиці виглядає так:
Потім встановіть contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
Ефект такий:
Здається, краще, правда?
І я пишу блог для вивчення contentInset
, критика вітається.
Чудове запитання.
Розглянемо наступний приклад ( 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
.