Для чего нужно свойство UIScrollView contentInset?



может кто-нибудь объяснить мне, что такое свойство contentInset в UIScrollView экземпляр используется для? А может приведем пример?

445   5  

5 ответов:

Он устанавливает расстояние вставки между видом содержимого и вложенным видом прокрутки. aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);

вот хороший iOS Reference Library article on scroll views что имеет информативный скриншот (рис 1-3) - я буду копировать его через текст здесь:

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


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

вид прокрутки заключает в себе представление содержимого плюс любое дополнение, предоставляемое указанными вставками содержимого.

хотя ответ 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

и мы хотим, чтобы текст никогда не появлялся прозрачно под верхними кнопками, но мы хотим, чтобы текст появляются под нижней панелью вкладок и все же позволяют прокручивать, чтобы мы могли обновить текст, сидящий прозрачно под нижней панелью вкладок.

затем мы установили бы верхнюю исходную точку ниже верхних кнопок и высоту, чтобы включить нижнюю часть нижней панели вкладок. Чтобы получить доступ к тексту, расположенному под содержимым нижней панели вкладок, мы бы установили нижнюю вставку на высоту нижней панели вкладок.

без вставки скроллер не позволит вам прокручивать вверх содержание достаточно, чтобы ввести в него. С вставкой, это как если бы содержимое имело дополнительный "пустой контент" размер вставки содержимого. Пустой текст был " вставлен "в реальное" содержание " - вот как я помню эту концепцию.

он используется для добавления заполнения в UIScrollView

без contentInset, вид таблицы выглядит так:

enter image description here

затем установить contentInset:

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

эффект, как показано ниже:

enter image description here

кажется, лучше, верно?

и я пишу блог исследование 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.

Comments

    Ничего не найдено.