Alguém pode me explicar para que UIScrollView
é usada a propriedade contentInset em uma instância? E talvez dê um exemplo?
Alguém pode me explicar para que UIScrollView
é usada a propriedade contentInset em uma instância? E talvez dê um exemplo?
Respostas:
Ele define a distância da inserção entre a visualização de conteúdo e a visualização de rolagem anexa.
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)
Aqui está um bom artigo da Biblioteca de referência do iOS sobre visualizações de rolagem que possui uma captura de tela informativa (fig. 1-3) - vou replicá-la via texto aqui:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
A exibição de rolagem inclui a exibição de conteúdo mais o preenchimento fornecido pelas inserções de conteúdo especificadas.
padding
propriedade CSS .
Embora a resposta do jball seja uma excelente descrição das inserções de conteúdo, ela não responde à questão de quando usá-lo. Vou emprestar seus diagramas:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
É isso que você obtém quando faz isso, mas a utilidade disso só aparece quando você rola:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
A linha superior do conteúdo ainda estará visível porque ainda está dentro do quadro da visualização de rolagem. Uma maneira de pensar no deslocamento superior é "quanto mover o conteúdo para baixo na exibição de rolagem quando estamos rolados até o topo"
Para ver um local em que isso é realmente usado, consulte o aplicativo Fotos incorporado no iphone. A barra de navegação e a barra de status são transparentes e o conteúdo da exibição de rolagem é visível embaixo. Isso ocorre porque o quadro da exibição de rolagem se estende até esse ponto. Mas, se não fosse o conteúdo inserido, você nunca conseguiria deixar a parte superior do conteúdo limpa nessa barra de navegação transparente ao percorrer todo o caminho até o topo.
As inserções de conteúdo resolvem o problema de ter conteúdo que fica abaixo de outras partes da interface do usuário e ainda permanece acessível usando barras de rolagem. Em outras palavras, o objetivo do Content Inset é tornar a área de interação menor que sua área real.
Considere o caso em que temos três áreas lógicas da tela:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
e queremos que o TEXTO nunca apareça de forma transparente embaixo dos BOTÕES SUPERIORES, mas queremos que o Texto apareça embaixo da BARRA DE TABELA INFERIOR e, ainda assim, permita a rolagem para que possamos atualizar o texto de forma transparente sob a BARRA DE TABELA INFERIOR.
Em seguida, definiríamos a origem superior para ficar abaixo dos BOTÕES SUPERIORES e a altura para incluir a parte inferior da BARRA DE TABELA INFERIOR. Para obter acesso ao Texto abaixo do conteúdo da BARRA DE TABELA, definiríamos a inserção inferior como a altura da BARRA DE TABELA.
Sem a inserção, o scroller não permite que você role o conteúdo o suficiente para digitar nele. Com a inserção, é como se o conteúdo tivesse "CONTEÚDO EM BRANCO" extra do tamanho da inserção do conteúdo. O texto em branco foi "inserido" no "conteúdo" real - é assim que me lembro do conceito.
É usado para adicionar preenchimento UIScrollView
Sem contentInset
, uma visualização de tabela é assim:
Em seguida, defina contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
O efeito é o seguinte:
Parece ser melhor, certo?
E eu escrevo um blog para estudar contentInset
, críticas são bem vindas.
Ótima pergunta.
Considere o seguinte exemplo ( scroller
é um 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)];
}
As inserções são a ÚNICA maneira de forçar seu scroller a ter uma "janela" no conteúdo onde você deseja. Ainda estou mexendo com esse código de exemplo, mas a idéia está aí: use as inserções para obter uma "janela" no seu UIScrollView
.