Tinggi standar untuk tajuk bagian di UITableView

125

Saya ingin mengatur ketinggian header pertama di UITableView saya. Untuk tajuk lainnya, saya ingin agar mereka tetap tinggi standar. Nilai / konstan apa yang bisa saya tempatkan "someDefaultHeight" dalam kode di bawah ini?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return someDefaultHeight;
}

Terima kasih

kendali
sumber
mengapa Anda tidak mencoba nilai yang berbeda sampai Anda mendapatkan sesuatu yang Anda sukai?
Daniel
4
@Aniel - jika Apple pernah memutuskan untuk mengubah nilai tinggi baris default maka saya perlu memastikan bahwa aplikasi saya tidak menyulitkan nilai ini (sampai jumlah tertentu). Cara terbaik untuk menarik informasi ini dari konstanta jika dinyatakan di suatu tempat.
instal

Jawaban:

204

Di iOS 5.0 dan seterusnya Anda dapat mengembalikan UITableViewAutomaticDimension di sebagian besar metode delegasi. Itu di bagian bawah halaman dokumentasi

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}
Ajaxharg
sumber
1
hmm .. Adapun saya UITableViewAutomaticDimensionkembali -1(hardcoded const) dan saya tidak melihat bagian sama sekali di saya UITableView.
skywinder
mengapa UITableViewAutomaticDimensionmenunjukkan -1 saat NSLogitu?
S1U
30
Ini hanya berfungsi ketika Anda menggunakan area: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionjika Anda menerapkan - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionmetode ini, ini tidak berhasil.
SuperSaiyen
2
Perlu dicatat, jika Anda menerapkan ini dan metode delegasi perkiraan dan mengembalikannya UITableViewAutomaticDimensionakan memiliki ketinggian nol.
Sam Soffes
4
@SuperSaiyen - Tidak bekerja dengan viewForHeaderInSectionAnda hanya perlu mengaturestimatedSectionHeaderHeight
Robert
48

Dari memeriksa default di aplikasi saya, sepertinya untuk tabel yang dikelompokkan, standarnya adalah tinggi 22 dan untuk tabel yang tidak dikelompokkan, standarnya adalah tinggi 10.

Jika Anda memeriksa nilai dari properti sectionHeaderHeight pada tampilan tabel Anda yang akan memberi tahu Anda.

paulthenerd
sumber
1
Terima kasih ... Saya akan membuat kode untuk ini. Meskipun saya berharap ada nilai konstan untuk ini.
instal
3
Anda memiliki ini mundur. UITableViewStyleGroupedadalah 22 dan UITableViewStylePlain10.
Michael Grinich
25

Sebenarnya lakukan triknya :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}
BadPirate
sumber
2
Saya pikir Anda maksud return [self.tableView sectionHeaderHeight];, atau lebih baik lagi return [tableView sectionHeaderHeight];,. Namun, keduanya mengembalikan -1 untuk saya, mungkin karena saya tidak menggunakan nib atau storyboard.
jk7
7

Demi kelengkapan: di iOS7 + tinggi untuk tajuk bagian gaya yang dikelompokkan adalah 55.5untuk tajuk pertama dan 38selanjutnya. (diukur dengan DCIntrospect)

ronhippler
sumber
4

Untuk swift 4.2 Anda harus mengembalikan UITableView.automaticDimension

Muvimotv
sumber
2

Saya tidak yakin apa jawaban yang benar di sini, tetapi baik 10 atau 22 tampaknya bukan ketinggian yang tepat untuk tampilan tabel yang dikelompokkan di iOS 5. Saya menggunakan 44, berdasarkan pertanyaan ini , dan setidaknya tampaknya secara kasar ketinggian yang benar.

Jason George
sumber
2

Untuk mendapatkan tinggi default, biarkan supermenangani itu:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return [super tableView:tableView heightForHeaderInSection:section];
}
Hendrik
sumber
[super tableView:tableView heightForHeaderInSection:section];mengembalikan 0 untuk saya, mungkin karena saya tidak menggunakan nib atau storyboard.
jk7
1
Ini hanya berfungsi jika Anda mensubklasifikasikan UITableViewController.
Wallace
-1

Ini harus melakukan trik

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}
Yogesh D
sumber
saya pikir maksud Andareturn [self sectionHeaderHeight];
TMB
@TMB [self sectionHeaderHeight];menghasilkan kesalahan. Apakah maksud Anda [tableView sectionHeaderHeight];?
jk7