如何更改分组的UITableView标头的高度?


88

我知道如何在表格视图中更改节标题的高度。但是我找不到在第一节之前更改默认间距的任何解决方案。

现在我有以下代码:

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

在此处输入图片说明



@JitendraDeore感谢指导我在正确的方向
circuitlego

Answers:


219

返回CGFLOAT_MIN所需的断面高度,而不是0。

返回0将导致UITableView使用默认值。这是未记录的行为。如果返回一个非常小的数字,则实际上会得到一个零高度的标头。

斯威夫特3:

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

迅速:

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

对象:

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

8
在Swift中,'CGFLOAT_MIN'不可用:请改用CGFloat.min。
tounaobun

4
CGFloat.min导致崩溃,因为CGFloat.min返回负值,如-0.0000000000001
Pavel

2
也许这是学究,但是CGFloat.min不是一个很小的数字,它是一个很大的负数。如果您希望数量很少,可以使用epsilon。
亚历克斯·伯德

6
在Swift 3中CGFloat.leastNormalMagnitude
ixany

1
忠告:不要在上使用此值estimatedHeightForHeaderInSection,应用程序将崩溃。
Pedro Paulo Amorim

27

如果使用分组tableView样式,则自动设置顶部和底部插图。为了避免它们并避免内部inset设置,请对页眉和页脚使用委托方法。从不返回0.0,但是tableViewCGFLOAT_MIN

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

迅速

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
}

我还必须返回nil以便viewForHeaderInSection标题完全消失。
Dominik Seemayr

19

看来我无法设置高度为0的表头视图。我最终执行以下操作:

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

最好在此处设置高度:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh

19

这对Swift 4来说对我有用。修改您的UITableView示例,例如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
救生员,感谢您抽出
宝贵

13

您可以尝试以下方法:

在里面 loadView

_tableView.sectionHeaderHeight = 0;

然后

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

只要标头中没有任何对象,就应将其删除...

并且,如果您想要节段标题的大小,则仅更改返回值。

如果不删除sectionfooter,则相同。

_tableView.sectionFooterHeight = 0;

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

好吧,这可以解决我在iOS7中使用tableview时遇到的问题。


3

self.tableView.tableHeaderView = [UIView new];添加后,您应该删除代码

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

它是footer高度是在我的情况引起的问题。感谢帮助。
pkc456,19年

2

您可以使用viewForHeaderInSection任意高度的视图并返回该视图。

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

我不是在问节头,而是在表头。
circuitlego 2013年

那么您可以将A uiview直接传递给表标题视图。
Divyam shukla

2

在迅速2.0

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

        return yourHeight
    }

2

在Swift 4中

在分组的tableview中删除多余的顶部填充。

在这里,高度被指定为段标题的最小高度1,因为您不能给0,因为如果tableview被分配为零高度,它将采用默认的上边距。

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

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

0

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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.