Может кто-нибудь объяснить мне, для чего используется свойство contentInset в UIScrollView
экземпляре? А может привести пример?
Может кто-нибудь объяснить мне, для чего используется свойство contentInset в UIScrollView
экземпляре? А может привести пример?
Ответы:
Он устанавливает расстояние вставки между представлением содержимого и представлением прокрутки.
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)
Вот хорошая статья о справочной библиотеке 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. Панель навигации и строка состояния прозрачны, а содержимое вида прокрутки видно под ним. Это потому, что кадр представления прокрутки простирается так далеко. Но если бы не вставка содержимого, вы никогда бы не смогли очистить верхнюю часть содержимого на этой прозрачной панели навигации, когда вы пройдете весь путь вверх.
Вставки содержимого решают проблему наличия содержимого, которое находится под другими частями пользовательского интерфейса и все же остается доступным с помощью полос прокрутки. Другими словами, цель Content Inset - сделать область взаимодействия меньше, чем ее фактическая область.
Рассмотрим случай, когда у нас есть три логические области экрана:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
и мы хотим, чтобы текст никогда не появлялся прозрачно под верхними кнопками, но мы хотим, чтобы текст появлялся под нижней панелью вкладок, и в то же время разрешал прокрутку, чтобы мы могли обновлять текст, прозрачно расположенный под нижней панелью вкладок.
Тогда мы бы установили верхнее начало координат под верхними кнопками, а высоту, чтобы включить нижнюю часть BOTTOM TAB BAR. Чтобы получить доступ к тексту, находящемуся под содержимым BOTTOM TAB BAR, мы должны установить нижнюю вставку равной высоте BOTTOM TAB BAR.
Без вставки, скроллер не позволил бы вам прокрутить контент, достаточный для ввода в него. Со вставкой это выглядит так, как если бы контент имел дополнительный «ПУСТОЙ КОНТЕНТ» размер вставки контента. Пустой текст был «вставлен» в реальный «контент» - вот как я помню концепцию.
Используется для добавления отступов в 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
.