Saya mengalami masalah saat mengubah ukuran tableHeaderView. Sederhana saja tidak berhasil.
1) Buat UITableView dan UIView (100 x 320 px);
2) Setel UIView sebagai tableHeaderView dari UITableView;
3) Bangun dan Mulai. Semuanya baik-baik saja.
Sekarang, saya ingin mengubah ukuran tableHeaderView, jadi saya menambahkan kode ini di viewDidLoad:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
Tinggi tableHeaderView akan muncul dengan 200, tetapi muncul dengan 100.
Jika saya menulis:
self.tableView.autoresizesSubviews = YES;
CGRect newFrame = myHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
myHeaderView.frame = newFrame;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
Kemudian dimulai dengan ketinggian 200, seperti yang saya inginkan. Tetapi saya ingin dapat memodifikasinya secara runtime.
Saya juga mencoba ini, tetapi tidak berhasil:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
[self.tableView.tableHeaderView setNeedsLayout];
[self.tableView.tableHeaderView setNeedsDisplay];
[self.tableView setNeedsLayout];
[self.tableView setNeedsDisplay];
Intinya di sini adalah: Bagaimana cara mengubah ukuran tableHeaderView dalam runtime ???
Adakah yang bisa melakukan ini?
Terima kasih
iMe
[tableView recalculateHeaderHeight]
setiap saat.setTableHeaderView:
panggilan dengan[tableview beginUpdates]
dan[tableview endUpdates]
Jawaban ini sudah lama dan tampaknya tidak berfungsi di iOS 7 ke atas.
Saya mengalami masalah yang sama, dan saya juga ingin perubahan beranimasi, jadi saya membuat subclass UIView untuk tampilan header saya dan menambahkan metode ini:
Ini pada dasarnya menganimasikan semua subview dari UITableView yang bukan tipe kelas yang sama dengan kelas pemanggil. Di akhir animasi, ini memanggil setTableHeaderView di superview (UITableView) - tanpa ini, konten UITableView akan melompat kembali saat pengguna menggulir. Satu-satunya batasan yang saya temukan sejauh ini adalah jika pengguna mencoba menggulir UITableView saat animasi berlangsung, pengguliran akan beranimasi seolah-olah tampilan tajuk belum diubah ukurannya (bukan masalah besar jika animasinya diubah). cepat).
sumber
Jika Anda ingin menganimasikan perubahan secara bersyarat, Anda dapat melakukan hal berikut:
Harap dicatat bahwa animasinya dua kali lipat:
tableHeaderView
. Ini dilakukan dengan menggunakanbeginUpdates
danendUpdates
UIView
blok animasi.Untuk menyinkronkan dua animasi itu,
animationCurve
harus disetel keUIViewAnimationCurveEaseInOut
dan durasinya0.3
, yang tampaknya menjadi apa yang digunakan UITableView untuk animasinya.Memperbarui
Saya membuat proyek Xcode di gihub, yang melakukan ini. Lihat proyek
ResizeTableHeaderViewAnimated
di besi / ios-quickiessumber
Saya pikir itu harus berfungsi jika Anda hanya mengatur ketinggian myHeaderView seperti ini:
sumber
Menggunakan solusi @garrettmoon di atas hingga iOS 7.
Berikut adalah solusi yang diperbarui berdasarkan @ garrettmoon's:
sumber
Ini bekerja untuk saya di iOS 7 dan 8. Kode ini berjalan pada pengontrol tampilan tabel.
sumber
Ini karena penyetel tableHeaderView.
Anda harus menyetel tinggi UIView sebelum menyetel tableHeaderView. (Akan jauh lebih mudah jika Apple membuka sumber kerangka kerja ini ...)
sumber
Pada iOS 9 dan lebih rendah,
tableHeaderView
tidak akan menata ulang setelah mengubah ukurannya. Masalah ini diselesaikan di iOS 10.Untuk mengatasi masalah ini, lakukan saja dengan kode berikut:
sumber
Di iOS 9.x, melakukan ini pada
viewDidLoad
berfungsi dengan baik:headerView
dideklarasikan sebagai@IBOutlet var headerView: UIView!
dan terhubung di storyboard, di mana ia ditempatkan di bagian atas tableView, untuk berfungsi sebagai tableHeaderView.sumber
Ini hanya untuk saat Anda menggunakan tata letak otomatis dan menyetel
translatesAutoresizingMaskIntoConstraints = false
ke tampilan tajuk khusus.Cara terbaik dan termudah adalah menimpa
intrinsicContentSize
. Secara internalUITableView
digunakanintrinsicContentSize
untuk menentukan ukuran header / footernya. Setelah Anda menggantiintrinsicContentSize
dalam tampilan kustom Anda, Yang perlu Anda lakukan adalah seperti di bawah iniinvalidateIntrinsicContentSize()
tableView.setNeedsLayout()
dantableView.layoutIfNeeded()
Kemudian
UITableView
header / footer akan diperbarui sesuai keinginan Anda. Tidak perlu mengatur tampilan nihil atau mengatur ulang.Satu hal yang sangat menarik bagi
UITableView.tableHeaderView
atau.tableFooterView
adalahUIStackView
kehilangan kemampuannya untuk mengelolanyaarrangedSubviews
. Jika Anda ingin menggunakanUIStackView
sebagai tableHeaderView atau tableFooterView, Anda harus menanamkan stackView dalamUIView
dan menimpaUIView
'sintrinsicContentSize
.sumber
Untuk cepat 5 kode Teruji
Catatan: Anda perlu memberikan semua batasan subview dari top, bottom, leading, trailing. Jadi itu akan mendapatkan seluruh ukuran yang dibutuhkan.
Referensi diambil dari: https://useyourloaf.com/blog/variable-height-table-view-header/
sumber
Pengaturan tinggi properti tampilan header
tableView.tableHeaderView
diviewDidLoad
tampaknya tidak berfungsi, tinggi tampilan header masih tidak berubah sesuai harapan.Setelah berjuang melawan masalah ini untuk banyak percobaan. Saya menemukan bahwa, Anda dapat mengubah ketinggian dengan menjalankan tampilan header membuat logika di dalam
- (void)didMoveToParentViewController:(UIViewController *)parent
metode.Jadi kode contoh akan terlihat seperti ini:
sumber
Saya menemukan initWithFrame penginisialisasi dari UIView tidak benar-benar menghormati rect yang saya berikan. Oleh karena itu, saya melakukan hal berikut yang bekerja dengan sempurna:
Keuntungannya adalah lebih baik dikemas ke dalam kode tampilan Anda.
sumber
UIScreen
adalah ide yang buruk, bagaimana Anda akan menggunakan kembali tampilan Anda?Saya telah menerapkan perubahan tinggi animasi header tabel untuk memperluas ke layar keseluruhan saat diketuk. Namun, kode dapat membantu dalam kasus lain:
sumber
Header pengubah ukuran UITableView - UISearchBar dengan Scope Bar
Saya menginginkan a
UITableView
dengan aUISearchBar
sebagai tajuk ke tabel jadi saya memiliki hierarki yang terlihat seperti iniUISearchBarDelegate
Seperti yang telah dinyatakan di tempat lain, jika Anda tidak menyetelTableViewHeader setelah mengubahnya, tidak akan terjadi apa-apa.
sumber
Jika custom headerView dirancang menggunakan autolayout dan headerView perlu diperbarui setelah web-fetch atau tugas malas serupa. kemudian di iOS-Swift saya melakukan ini dan memperbarui headerView saya menggunakan kode di bawah ini:
sumber
Jelas, sekarang Apple seharusnya telah mengimplementasikan UITableViewAutomaticDimension untuk tableHeaderView & tableFooterView ...
Berikut ini tampaknya berfungsi untuk saya menggunakan contraint layout:
sumber
Jika tableHeaderView Anda adalah webView yang dapat disesuaikan konten, Anda dapat mencoba:
Saya mengujinya di iOS9 dan iOS11, bekerja dengan baik.
sumber
Apakah Anda mencoba
[self.tableView reloadData]
setelah mengubah ketinggian?sumber
- [UITableView reloadData]
hanya ditujukan untuk tampilan dinamis (sel) dan juga sectionHeaders yang Anda pikir jelas dimaksudkan;)