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


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;
}

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.


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];
}

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)


4

Untuk swift 4.2 Anda harus mengembalikan UITableView.automaticDimension


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.


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];
}

[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];
}

saya pikir maksud Andareturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];menghasilkan kesalahan. Apakah maksud Anda [tableView sectionHeaderHeight];?
jk7
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.