Bagaimana cara mengubah tinggi header UITableView yang dikelompokkan?

88

Saya tahu cara mengubah tinggi header bagian dalam tampilan tabel. Tetapi saya tidak dapat menemukan solusi apa pun untuk mengubah spasi default sebelum bagian pertama.

Sekarang saya memiliki kode ini:

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

masukkan deskripsi gambar di sini

circuitlego
sumber
1
stackoverflow.com/questions/5441938/… Lihat tautan ini ...
Jitendra
@JitendraDeore Terima kasih telah membimbing saya ke arah yang benar
circuitlego

Jawaban:

219

Kembalikan, CGFLOAT_MINbukan 0 untuk tinggi bagian yang Anda inginkan.

Mengembalikan 0 menyebabkan UITableView menggunakan nilai default. Ini adalah perilaku yang tidak terdokumentasi. Jika Anda mengembalikan angka yang sangat kecil, Anda secara efektif mendapatkan header dengan tinggi nol.

Cepat 3:

 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0 {
            return CGFloat.leastNormalMagnitude
        }
        return tableView.sectionHeaderHeight
    }

Cepat:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return CGFloat.min
    }
    return tableView.sectionHeaderHeight
}

Obj-C:

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return CGFLOAT_MIN;
    return tableView.sectionHeaderHeight;
}
Mark Krenek
sumber
8
Di Swift, 'CGFLOAT_MIN' tidak tersedia: gunakan CGFloat.min sebagai gantinya.
tounaobun
4
CGFloat.min menyebabkan crash, karena CGFloat.min mengembalikan nilai negatif seperti -0.0000000000001
Pavel Gatilov
2
Mungkin ini kesederhanaan, tetapi CGFloat.min bukanlah angka yang sangat kecil, ini adalah angka negatif yang sangat besar. Jika Anda menginginkan jumlah yang sangat kecil, Anda akan menggunakan epsilon.
Alex bird
6
Di Swift 3 ituCGFloat.leastNormalMagnitude
ixany
1
Advise: Jangan gunakan nilai ini estimatedHeightForHeaderInSection, aplikasi akan crash.
Pedro Paulo Amorim
27

Jika Anda menggunakan tableViewgaya yang dikelompokkan , tableViewsecara otomatis mengatur insets atas dan bawah. Untuk menghindarinya dan menghindari pengaturan insets internal, gunakan metode delegasi untuk header dan footer. Jangan pernah mengembalikan 0,0 tetapiCGFLOAT_MIN .

Objective-C

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

Cepat

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}
Jakub Truhlář
sumber
Saya juga harus mengembalikan nol agar viewForHeaderInSectionheader sepenuhnya menghilang.
Dominik Seemayr
19

Tampaknya saya tidak dapat menyetel tampilan tajuk tabel dengan ketinggian 0. Saya akhirnya melakukan hal berikut:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}
circuitlego
sumber
Ini akan lebih baik untuk mengatur ketinggian di sini:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh
19

Ini berhasil untuk saya dengan Swift 4 . Ubah UITableViewcontoh Anda di viewDidLoad:

// Remove space between sections.
tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

// Remove space at top and bottom of tableView.
tableView.tableHeaderView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
FBente
sumber
1
Lifesaver, terima kasih telah meluangkan waktu untuk menyebutkannya di sini :)
user2672052
13

Anda dapat mencoba ini:

Dalam loadView

_tableView.sectionHeaderHeight = 0;

Kemudian

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0;
}

Ini harus dihapus selama Anda tidak memiliki objek apa pun di header ...

Dan jika Anda ingin beberapa ukuran bagian kepala, maka ubah hanya nilai yang dikembalikan.

sama jika Anda tidak menghapus bagianfooter.

_tableView.sectionFooterHeight = 0;

dan

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 0;
}

Nah, ini berfungsi untuk masalah saya dengan tampilan tabel di iOS7.

Odd-Arne Dahle
sumber
3

Anda harus menghapus kode tersebut self.tableView.tableHeaderView = [UIView new];setelah Anda menambahkan

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return CGFLOAT_MIN;
}
Chris Yim
sumber
Ini adalah footerketinggian yang menyebabkan masalah dalam kasus saya. Terimakasih atas bantuannya.
pkc456
2

Anda dapat menggunakan viewForHeaderInSectiondan mengembalikan tampilan dengan ketinggian berapa pun.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

    int height = 30 //you can change the height 
    if(section==0)
    {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)];

       return view;
    }
}
Divyam shukla
sumber
Saya tidak bertanya tentang header bagian, tetapi header tabel.
circuitlego
Anda dapat langsung meneruskan tampilan ke tampilan tajuk tabel.
Divyam shukla
2

Dalam 2.0 cepat

func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {

        return yourHeight
    }
George Asda
sumber
2

Di Swift 4

Hapus bantalan ekstra atas dalam tampilan tabel yang dikelompokkan.

Di sini tinggi diberikan 1 sebagai tinggi minimal untuk tajuk bagian karena Anda tidak dapat memberikan 0 karena tampilan tabel akan menggunakan margin atas default jika ditetapkan ketinggian nol.

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 1
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return UIView()
}
jaiswal Rajan
sumber
0

Contoh viewForHeaderInSection:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 118)];
view.backgroundColor = COLOR_DEFAULT;

NSString* key = [self.tableKeys objectAtIndex:section];
NSArray *result = (NSArray*)[self.filteredTableData objectForKey:key];
SZTicketsResult *ticketResult = [result objectAtIndex:0];

UIView *smallColoredView = [[UIView alloc] initWithFrame:CGRectMake(0, 5, 320, 3)];
smallColoredView.backgroundColor = COLOR_DEFAULT_KOSTKY;
[view addSubview:smallColoredView];

UIView *topBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 8, 320, 40)];
topBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:topBackgroundView];

UILabel *totalWinnings = [[UILabel alloc] initWithFrame:CGRectMake(10, 8, 300, 40)];
totalWinnings.text = ticketResult.message;
totalWinnings.minimumFontSize = 10.0f;
totalWinnings.numberOfLines = 0;
totalWinnings.backgroundColor = [UIColor clearColor];
totalWinnings.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:totalWinnings];

UIView *bottomBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 320, 58)];
bottomBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:bottomBackgroundView];

UILabel *numberOfDraw = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, 290, 58)];
numberOfDraw.text = [NSString stringWithFormat:@"sometext %@",[ticketResult.title lowercaseString]];;
numberOfDraw.minimumFontSize = 10.0f;
numberOfDraw.numberOfLines = 0;
numberOfDraw.backgroundColor = [UIColor clearColor];
numberOfDraw.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:numberOfDraw];

return view;
Jasper
sumber
0

Dua baris ini sudah cukup.

tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0
    

Bagi saya, ini berfungsi di Xcode 12.2, iOS 14.2

indrajit
sumber