Kann mir jemand erklären, wofür die contentInset-Eigenschaft in einer UIScrollView
Instanz verwendet wird? Und vielleicht ein Beispiel geben?
Kann mir jemand erklären, wofür die contentInset-Eigenschaft in einer UIScrollView
Instanz verwendet wird? Und vielleicht ein Beispiel geben?
Antworten:
Hiermit wird der Abstand des Einschubs zwischen der Inhaltsansicht und der umschließenden Bildlaufansicht festgelegt.
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)
Hier ist ein guter Artikel der iOS-Referenzbibliothek zu Bildlaufansichten mit einem informativen Screenshot (Abb. 1-3). Ich werde ihn hier per Text replizieren:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
Die Bildlaufansicht enthält die Inhaltsansicht sowie alle Auffüllungen, die von den angegebenen Inhaltseinfügungen bereitgestellt werden.
padding
Eigenschaft.
Die Antwort von jball ist zwar eine hervorragende Beschreibung der Inhaltseinfügungen, beantwortet jedoch nicht die Frage, wann sie verwendet werden soll. Ich werde aus seinen Diagrammen ausleihen:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
Das bekommen Sie, wenn Sie es tun, aber die Nützlichkeit zeigt sich nur, wenn Sie scrollen:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
Diese obere Inhaltszeile ist weiterhin sichtbar, da sie sich noch im Rahmen der Bildlaufansicht befindet. Eine Möglichkeit, sich den oberen Versatz vorzustellen, besteht darin, "wie stark der Inhalt in der Bildlaufansicht nach unten verschoben werden muss, wenn wir ganz nach oben gescrollt haben".
Um einen Ort zu sehen, an dem dies tatsächlich verwendet wird, schauen Sie sich die integrierte Foto-App auf dem iPhone an. Die Navigationsleiste und die Statusleiste sind transparent und der Inhalt der Bildlaufansicht ist darunter sichtbar. Das liegt daran, dass sich der Rahmen der Bildlaufansicht so weit erstreckt. Ohne den eingefügten Inhalt wäre es jedoch niemals möglich, den oberen Rand des Inhalts durch diese transparente Navigationsleiste freizugeben, wenn Sie ganz nach oben gehen.
Inhaltseinfügungen lösen das Problem, dass Inhalte unter anderen Teilen der Benutzeroberfläche angezeigt werden und dennoch über Bildlaufleisten erreichbar bleiben. Mit anderen Worten, der Zweck des Inhaltseinsatzes besteht darin, den Interaktionsbereich kleiner als seinen tatsächlichen Bereich zu machen.
Stellen Sie sich den Fall vor, in dem wir drei logische Bereiche des Bildschirms haben:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
und wir möchten, dass der TEXT niemals transparent unter den TOP-TASTEN angezeigt wird, aber wir möchten, dass der Text unter der UNTEREN TAB-BAR angezeigt wird und dennoch das Scrollen ermöglicht, damit wir den Text unter der UNTEN-TAB-BAR transparent aktualisieren können.
Dann würden wir den oberen Ursprung so einstellen, dass er unter den TOP-TASTEN liegt, und die Höhe so, dass sie den unteren Rand der UNTEREN TAB-BAR einschließt. Um Zugriff auf den Text zu erhalten, der sich unter dem Inhalt der BOTTOM TAB BAR befindet, setzen wir den unteren Einschub auf die Höhe der BOTTOM TAB BAR.
Ohne den Einschub würde der Scroller nicht zulassen, dass Sie den Inhalt so weit nach oben scrollen, dass Sie ihn eingeben können. Mit dem Einschub ist es so, als hätte der Inhalt einen zusätzlichen "LEEREN INHALT" in der Größe des Inhaltseinsatzes. Leerer Text wurde in den eigentlichen "Inhalt" "eingefügt" - so erinnere ich mich an das Konzept.
Es wird verwendet, um Polster hinzuzufügen UIScrollView
Ohne contentInset
ist eine Tabellenansicht wie folgt:
Dann setzen Sie contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
Der Effekt ist wie folgt:
Scheint besser zu sein, oder?
Und ich schreibe einen Blog , um das zu studieren contentInset
, Kritik ist willkommen.
Gute Frage.
Betrachten Sie das folgende Beispiel ( scroller
ist eine 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)];
}
Die Einfügungen sind die EINZIGE Möglichkeit, Ihren Scroller zu zwingen, ein "Fenster" für den Inhalt zu haben, in dem Sie ihn haben möchten. Ich spiele immer noch mit diesem Beispielcode, aber die Idee ist da: Verwenden Sie die Einfügungen, um ein "Fenster" auf Ihrem zu bekommen UIScrollView
.