Qualcuno può spiegarmi a cosa serve la proprietà contentInset in UIScrollView
un'istanza? E forse fornire un esempio?
Qualcuno può spiegarmi a cosa serve la proprietà contentInset in UIScrollView
un'istanza? E forse fornire un esempio?
Risposte:
Imposta la distanza dell'inserzione tra la vista contenuto e la vista di scorrimento inclusa.
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)
Ecco un buon articolo della libreria di riferimento iOS sulle viste di scorrimento che ha uno screenshot informativo (fig 1-3): lo replicherò via testo qui:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
La vista di scorrimento racchiude la vista del contenuto più qualsiasi imbottitura fornita dagli inserti del contenuto specificati.
padding
proprietà CSS .
Mentre la risposta di jball è un'eccellente descrizione delle inserzioni di contenuto, non risponde alla domanda su quando usarla. Prenderò in prestito dai suoi diagrammi:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
Questo è ciò che ottieni quando lo fai, ma l'utilità di esso mostra solo quando scorri:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
Quella riga superiore di contenuto sarà comunque visibile perché è ancora all'interno del riquadro della vista di scorrimento. Un modo di pensare all'offset superiore è "quanto spostare il contenuto verso il basso nella vista di scorrimento quando siamo fatti scorrere verso l'alto"
Per vedere un luogo in cui questo viene effettivamente utilizzato, guarda l'app Foto incorporata sull'iPhone. La barra di navigazione e la barra di stato sono trasparenti e il contenuto della vista di scorrimento è visibile sotto. Questo perché la cornice della vista di scorrimento si estende così lontano. Ma se non fosse per l'inserzione del contenuto, non saresti mai in grado di avere la parte superiore del contenuto chiara quella barra di navigazione trasparente quando vai fino in cima.
Le inserzioni di contenuto risolvono il problema di disporre di contenuti che si trovano al di sotto di altre parti dell'interfaccia utente e rimangono comunque raggiungibili utilizzando le barre di scorrimento. In altre parole, lo scopo dell'inserzione contenuto è rendere l'area di interazione più piccola della sua area effettiva.
Considera il caso in cui abbiamo tre aree logiche dello schermo:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
e vogliamo che il TESTO non appaia mai in modo trasparente sotto i PULSANTI SUPERIORI, ma vogliamo che il Testo appaia sotto la BARRA DI SCHEDA INFERIORE e tuttavia consentiamo ancora lo scorrimento in modo da poter aggiornare il testo in modo trasparente sotto la BARRA DI SCHEDA INFERIORE.
Quindi impostiamo l'origine superiore in modo che si trovi al di sotto dei PULSANTI SUPERIORI e l'altezza includa la parte inferiore della TAB BAR BOTTOM. Per ottenere l'accesso al testo che si trova sotto il contenuto di TAB BAR BOTTOM, impostare l'inserto inferiore in modo che sia l'altezza del TAB BAR BOTTOM.
Senza l'inserzione, lo scroller non ti permetterebbe di scorrere il contenuto abbastanza da digitarlo. Con l'inserzione, è come se il contenuto avesse "CONTENUTO IN BIANCO" extra la dimensione dell'inserzione del contenuto. Il testo vuoto è stato "inserito" nel vero "contenuto" - è così che ricordo il concetto.
È usato per aggiungere imbottitura UIScrollView
Senza contentInset
, una vista tabella è così:
Quindi impostare contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
L'effetto è il seguente:
Sembra essere migliore, vero?
E scrivo un blog per studiare contentInset
, le critiche sono benvenute.
Ottima domanda
Considera il seguente esempio ( scroller
è un 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)];
}
Le inserzioni sono l'UNICO modo per forzare il tuo scroller ad avere una "finestra" sul contenuto dove lo desideri. Sto ancora scherzando con questo codice di esempio, ma l'idea è lì: usa gli inserti per ottenere una "finestra" sul tuo UIScrollView
.