Dapatkah seseorang menjelaskan kepada saya untuk apa properti contentInset UIScrollView
digunakan? Dan mungkin memberikan contoh?
Dapatkah seseorang menjelaskan kepada saya untuk apa properti contentInset UIScrollView
digunakan? Dan mungkin memberikan contoh?
Jawaban:
Ini mengatur jarak inset antara tampilan konten dan tampilan gulir terlampir.
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)
Inilah artikel Perpustakaan Referensi iOS yang bagus tentang tampilan gulir yang memiliki tangkapan layar informatif (gbr 1-3) - Saya akan mereplikasi melalui teks di sini:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
Tampilan gulir melampirkan tampilan konten ditambah padding apa pun yang disediakan oleh inset konten yang ditentukan.
padding
properti CSS .
Sementara jawaban jball adalah deskripsi yang sangat baik dari insets konten, itu tidak menjawab pertanyaan kapan harus menggunakannya. Saya akan meminjam dari diagramnya:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
Itulah yang Anda dapatkan saat melakukannya, tetapi kegunaannya hanya muncul saat Anda menggulir:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
Baris atas konten itu akan tetap terlihat karena masih di dalam bingkai tampilan gulir. Salah satu cara untuk memikirkan offset atas adalah "berapa banyak untuk menggeser konten ke bawah tampilan gulir ketika kita digulirkan sepenuhnya ke atas"
Untuk melihat tempat di mana ini benar-benar digunakan, lihat aplikasi Foto bawaan di iphone. Bilah Navigasi dan bilah status transparan, dan konten tampilan gulir terlihat di bawahnya. Itu karena bingkai tampilan gulir memanjang sejauh itu. Tetapi jika bukan karena inset konten, Anda tidak akan pernah dapat memiliki bagian atas konten yang menghapus navigasi bar transparan ketika Anda pergi jauh ke atas.
Insets konten memecahkan masalah memiliki konten yang berada di bawah bagian lain dari Antarmuka Pengguna dan masih dapat dijangkau menggunakan bilah gulir. Dengan kata lain, tujuan dari Inset Konten adalah untuk membuat area interaksi lebih kecil dari area sebenarnya.
Pertimbangkan kasus di mana kita memiliki tiga area logis layar:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
dan kami ingin TEKS agar tidak pernah muncul secara transparan di bawah TOP TOMBOL, tetapi kami ingin Teks muncul di bawah BOTTOM TAB BAR dan masih memungkinkan pengguliran sehingga kami dapat memperbarui teks yang duduk secara transparan di bawah BOTTOM TAB BAR.
Kemudian kita akan menetapkan asal atas menjadi di bawah TOMBOL TOP, dan tinggi untuk memasukkan bagian bawah BOTTOM TAB BAR. Untuk mendapatkan akses ke Teks yang duduk di bawah konten BOTTOM TAB BAR kami akan mengatur inset bawah menjadi ketinggian BOTTOM TAB BAR.
Tanpa sisipan, penggulung tidak akan membiarkan Anda menggulung konten yang cukup untuk mengetik ke dalamnya. Dengan inset, seolah-olah konten memiliki "isi BLANK" ekstra ukuran inset konten. Teks kosong telah "inset" ke dalam "konten" yang sebenarnya - begitulah saya mengingat konsepnya.
Ini digunakan untuk menambahkan padding UIScrollView
Tanpa contentInset
, tampilan tabel seperti ini:
Kemudian atur contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
Efeknya adalah sebagai berikut:
Tampaknya lebih baik, bukan?
Dan saya menulis blog untuk mempelajari contentInset
, kritik diterima.
Pertanyaan yang bagus
Pertimbangkan contoh berikut ( scroller
adalah 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)];
}
Insets adalah HANYA cara untuk memaksa scroller Anda memiliki "jendela" pada konten yang Anda inginkan. Saya masih mengacaukan kode sampel ini, tetapi idenya ada di sana: gunakan insets untuk mendapatkan "jendela" di blog Anda UIScrollView
.