Gruplanmış UITableView başlığının yüksekliği nasıl değiştirilir?


88

Tablo görünümünde bölüm başlıklarının yüksekliğini nasıl değiştireceğimi biliyorum. Ancak, ilk bölümden önceki varsayılan aralığı değiştirmek için herhangi bir çözüm bulamıyorum.

Şu anda bu koda sahibim:

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

görüntü açıklamasını buraya girin



Bana doğru yönde yönlendirmek için @JitendraDeore Teşekkür
circuitlego

Yanıtlar:


219

CGFLOAT_MINİstediğiniz bölüm yüksekliği için 0 yerine dönün .

0 döndürülmesi, UITableView'ın varsayılan bir değer kullanmasına neden olur. Bu, belgelenmemiş bir davranıştır. Çok küçük bir sayı döndürürseniz, etkili bir şekilde sıfır yükseklikte bir başlık alırsınız.

Swift 3:

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

Swift:

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

8
Swift'de 'CGFLOAT_MIN' mevcut değil: bunun yerine CGFloat.min'i kullanın.
tounaobun

4
CGFloat.min çökmeye neden oldu, çünkü CGFloat.min -0.0000000000001 gibi negatif bir değer döndürüyor
Pavel Gatilov

2
Belki bu bilgiçlik ama CGFloat.min çok küçük bir sayı değil, çok büyük bir negatif sayı. Çok küçük bir sayı istiyorsanız epsilon kullanırsınız.
alex bird

6
Swift 3'teCGFloat.leastNormalMagnitude
ixany

1
Tavsiye: Bu değeri kullanmayın estimatedHeightForHeaderInSection, uygulama çökecektir.
Pedro Paulo Amorim

27

GruplandırılmıştableView stil kullanıyorsanız , üst ve alt girintileri otomatik olarak ayarlayın. Bunlardan kaçınmak ve dahili iç metin ayarlarından kaçınmak için üstbilgi ve altbilgi için temsilci yöntemlerini kullanın. Asla 0,0 döndür ama .tableViewCGFLOAT_MIN

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

Swift

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
}

I, ilaveten zorunda nil geri için viewForHeaderInSectiontamamen kaybolmasına başlığı için.
Dominik Seemayr

19

Görünüşe göre yüksekliği 0 olan bir tablo başlığı görünümü ayarlayamıyorum. Sonunda şunu yaptım:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

Burada yüksekliği ayarlamak daha iyi olur:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh

19

Bu benim için Swift 4 ile çalıştı . Senin değiştirin UITableViewörneğin içinde 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)))

1
Lifesaver, burada bahsetmek için zaman ayırdığınız için teşekkürler :)
user2672052

13

Bunu deneyebilirsiniz:

İçinde loadView

_tableView.sectionHeaderHeight = 0;

Sonra

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

Başlıkta herhangi bir nesneniz olmadığı sürece kaldırılmalıdır ...

Ve bölüm başlığının bir boyutunu istiyorsanız, yalnızca dönüş değerini değiştirin.

Bölüm altlığını kaldırmazsanız aynı.

_tableView.sectionFooterHeight = 0;

ve

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

Bu, iOS7'deki tablo görünümüyle ilgili sorunlarım için işe yarıyor.


3

Kodu self.tableView.tableHeaderView = [UIView new];ekledikten sonra kaldırmalısınız

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

Öyle footerbenim durumumda soruna neden olan yükseklik. Yardım için teşekkürler.
pkc456

2

viewForHeaderInSectionherhangi bir yükseklikte bir görünümü kullanabilir ve geri döndürebilirsiniz.

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

Bölüm başlıklarını sormuyorum, tablo başlığı.
Circuitlego

daha sonra bir uiview'ı doğrudan tablo başlığı görünümüne geçirebilirsiniz.
Divyam shukla

2

Swift 2.0'da

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

        return yourHeight
    }

2

Swift 4'te

Gruplanmış tablo görünümündeki fazla üst dolguyu kaldırın.

Burada yükseklik, bölüm başlığı için minimum yükseklik olarak 1 olarak verilmiştir, çünkü 0 veremezsiniz çünkü tablo görünümü, sıfır yükseklik atanırsa varsayılan üst kenar boşluğunu alacaktır.

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

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

0

ViewForHeaderInSection örneği:

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

0

Bu iki satır yeterli.

tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0
    

Benim için Xcode 12.2, iOS 14.2'de çalışıyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.