Czy ktoś może mi wyjaśnić, do czego służy właściwość contentInset w UIScrollView
instancji? A może podać przykład?
Czy ktoś może mi wyjaśnić, do czego służy właściwość contentInset w UIScrollView
instancji? A może podać przykład?
Odpowiedzi:
Ustawia odległość wstawki między widokiem zawartości a otaczającym widokiem przewijania.
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)
Oto dobry artykuł z biblioteki referencyjnej iOS na temat widoków przewijania, który zawiera pouczający zrzut ekranu (rys. 1-3) - powielę go za pomocą tekstu tutaj:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
Widok przewijania obejmuje widok treści oraz wypełnienie zapewniane przez określone wstawki treści.
padding
właściwości CSS .
Chociaż odpowiedź jball jest doskonałym opisem wstawek z treścią, nie odpowiada jednak na pytanie, kiedy z niej korzystać. Pożyczę z jego diagramów:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
To właśnie dostajesz, kiedy to robisz, ale użyteczność tego pokazuje się tylko podczas przewijania:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
Ten górny wiersz treści będzie nadal widoczny, ponieważ nadal znajduje się w ramce widoku przewijania. Jednym ze sposobów wyobrażenia sobie górnego przesunięcia jest „o ile przesunąć zawartość w dół widoku przewijania, gdy jesteśmy przewijani do samego końca”
Aby zobaczyć miejsce, w którym jest to faktycznie używane, spójrz na wbudowaną aplikację Zdjęcia na iPhonie. Pasek nawigacji i pasek stanu są przezroczyste, a zawartość widoku przewijania jest widoczna pod spodem. Dzieje się tak, ponieważ ramka widoku przewijania rozciąga się tak daleko. Ale gdyby nie wstawka z treścią, nigdy nie byłbyś w stanie wyczyścić górnej części treści z przezroczystego paska nawigacyjnego po przejściu na samą górę.
Wstawki treści rozwiązują problem polegający na tym, że zawartość znajduje się pod innymi częściami interfejsu użytkownika, a mimo to pozostaje dostępna za pomocą pasków przewijania. Innymi słowy, celem elementu Content Inset jest zmniejszenie obszaru interakcji niż jego rzeczywisty obszar.
Rozważmy przypadek, w którym mamy trzy logiczne obszary ekranu:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
i chcemy, aby TEKST nigdy nie pojawiał się przezroczysto pod GÓRNYMI PRZYCISKAMI, ale chcemy, aby tekst znajdował się pod DOLNYM PASKIEM ZAKŁADKI, a mimo to umożliwiał przewijanie, abyśmy mogli zaktualizować tekst znajdujący się przezroczysto pod PASKIEM ZAKŁADKI DOLNYM.
Następnie ustawilibyśmy górny początek tak, aby znajdował się poniżej GÓRNYCH PRZYCISKÓW, a wysokość tak, aby obejmowała dół DOLNEGO PASKA ZAKŁADKI. Aby uzyskać dostęp do tekstu znajdującego się pod zawartością DOLNEGO PASKA ZAKŁADKI, ustawilibyśmy dolną wstawkę na wysokość DOLNEGO PASKA ZAKŁADKI.
Bez wstawki przewijak nie pozwoliłby na przewinięcie zawartości na tyle, aby można było do niej wpisać. W przypadku wstawki wygląda to tak, jakby treść miała dodatkową „PUSTĄ TREŚĆ” w rozmiarze wstawki z treścią. Pusty tekst został „wstawiony” w prawdziwą „treść” - tak pamiętam koncepcję.
Służy do dodawania dopełnienia UIScrollView
Bez contentInset
widoku tabeli wygląda to następująco:
Następnie ustaw contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
Efekt jest jak poniżej:
Wydaje się, że jest lepiej, prawda?
I piszę bloga, żeby przestudiować contentInset
, krytyka jest mile widziana.
Świetne pytanie.
Rozważmy następujący przykład ( scroller
to 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)];
}
Wstawki są JEDYNYM sposobem na wymuszenie na twoim przewijaniu "okienka" na zawartość, gdzie chcesz. Nadal majstruję przy tym przykładowym kodzie, ale idea jest taka: użyj wstawek, aby uzyskać "okno" na swoim UIScrollView
.