减少UITableView部分之间的空间


141

有没有办法减少UITableView的两个部分之间的空间?我拥有的每个部分之间大约有15个像素。我确实已经尝试过为返回0 -tableView:heightForFooterInSection:-tableView:heightForHeaderInSection:但这并没有改变任何东西。

有什么建议?


1
我正在使用分组的 tableView并将页眉/页脚高度设置为0.0。但是它显示的是灰色区域,高度(默认)为30点。使用0.0是不被接受的。您必须使用0.0例如以上的任何值0.0001
亲爱的

正如@Honey所说的0.0那样不起作用。对于同一问题,我有一个更彻底的答案:stackoverflow.com/a/22185534/2789144
James Nelson

Answers:


263

这有点棘手,但是请尝试以下代码:

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

    return 1.0;
}

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

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

相应地更改值。要删除空间,我认为0.0将不被接受。最小的理智值似乎是1.0。


2
由于双重浮动冲突,您应返回5.0f而不是5.0f
LeonS 2011年

45
您甚至可以返回0.00001f作为高度,并且将获得0像素/点的高度。
克拉斯

1
正如@Klass指出的那样,您不能将其0用作高度-您将获得默认高度。
zekel 2014年

26
为什么不使用CGFLOAT_MIN?它是针对这种情况而设计的:)
Andrei Filip

12
如果使用swift,您可以返回CGFloat.leastNonzeroMagnitude
oztune 2016年

140

对于所有想要将距离缩小到0的人,都必须使用:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

因为提供UITableViewDelegate只会从大于零的浮点数开始产生效果。

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


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

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(将iOS 4.1与XCode 4.0.2结合使用)


7
返回0.0001; 为我工作。我正在使用xcode 4.6和iOS 6.1
Sam Sam

我只需要在前两种方法中返回CGFLOAT_MIN,它就可以正常工作。
朱利叶斯

而不是0使用return .leastNormalMagnitude
stan

33

您实际上可以在Interface Builder的size选项卡下设置页脚/页眉/单元格高度。默认情况下,页眉/页脚设置为10.0。


我认为这种行为是在iOS 5.0或iOS 6.0中添加的,但是是的-现在设置组之间的距离要容易得多。
Vlas Voloshin

2
我知道这已经很老了,但是我想评论一下,从XCode 5和iOS 7开始,这似乎需要用代码完成。我在界面生成器中将其设置为0,但仍将其设置为1,直到在代码中将其设置
Ahmad

使用Xcode 6和iOS 8,似乎只能使用情节提要中的配置。
Murray Sagal 2014年

默认情况下,它们在xcode 7上设置为18。但这是迄今为止最简单的解决方案!
static0886 '16

27

您必须减少节的页眉/页脚高度。然后,节之间的空间将减小。

试试这个代码

这个对我有用 :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

您还可以从情节提要中减小节的页脚和页眉的高度。在表格视图->大小检查器中。转到截面高度。

故事板中UITableView的大小检查器。

默认情况下,普通样式表设置为22,分组样式表设置为10。您可以通过分别增加/减少页眉和页脚的值来配置值。


6

对我而言,问题是因为我使用的是分组表格视图样式(UITableViewStyleGrouped)。当我将其更改为简单样式(UITableViewStylePlain)时,我的tableView:heightForHeaderInSection:方法是确定每个节标题的大小的唯一方法。


4

也许使用它,0将无法正常工作

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

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

iOS7更新由于ARC自动发布更新,因此这里的@Martin Stolz代码已编辑。

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

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

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(使用iOS7,Xcode v5.0)


0

对我来说,只需使用以下代码即可解决此问题,

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

为第一部分返回1解决了该问题。


0

要更改页眉/页脚空间必须实现以下方法:

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

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(使用相应方法更改页脚高度)

以下代码完全删除了节周围的空格:

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

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

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
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.