UITableViewのセクション間のスペースを減らす


141

UITableViewの2つのセクション間のスペースを減らす方法はありますか?私が持っているすべてのセクションの間に約15ピクセルがあります。私はすでに0を返そう-tableView:heightForFooterInSection:としました-tableView:heightForHeaderInSection:が、何も変わりません。

助言がありますか?


1
グループ化された tableView を使用して、ヘッダー/フッターの高さをに設定していました0.0。しかし、(デフォルトの)30ポイントの高さの灰色の領域が表示されていました。使用0.0は許可されていません。0.0たとえば、上記の値を使用する必要があります0.0001
蜂蜜

@ハニーが言うように0.0動作しません。私はここで同じ問題についてより完全な答えを持っています:stackoverflow.com/a/22185534/2789144
James Nelson

回答:


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
double-floatの競合のため、5.0ではなく5.0fを返す必要があります
LeonS

45
高さとして0.00001fを返すこともでき、0ピクセル/ポイントの高さを取得します。
Klaas

1
@Klassが指摘する0ように、高さとして使用することはできません。デフォルトの高さが取得されます。
ゼケル

26
CGFLOAT_MINを使用しないのはなぜですか?それはこれらの種類のシナリオのために作られています:)
Andrei Filip '11年

12
CGFloat.leastNonzeroMagnitude
Swift

140

距離を0に縮小したいすべての人が使用する必要があります:

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

UITableViewDelegateの提供は、0より大きい浮動小数点数からのみ効果を生み出すためです。

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

(XCode 4.0.2でiOS 4.1を使用)


7
0.0001を返します。私のために働いています。私はxcode 4.6とiOS 6.1を使用しています
Sam

最初の2つのメソッドでCGFLOAT_MINを返すだけで十分です。
ジュリアス

0の代わりに使用return .leastNormalMagnitude
スタン、

33

実際には、サイズタブの下のInterface Builderでフッター/ヘッダー/セルの高さを設定できます。デフォルトでは、ヘッダー/フッターは10.0に設定されています。


このような動作はiOS 5.0またはiOS 6.0で追加されたと思いますが、はい-グループ間の距離を設定するのがはるかに簡単になりました。
Vlas Voloshin 2013年

2
私はこれが古いことを知っていますが、XCode 5とiOS 7の時点では、これはコードで実行する必要があるようです。私は0にインターフェイスビルダーでそれを設定して、私は0にコードでそれを設定するまで、それはまだ1に設定した
アフマド

Xcode 6とiOS 8では、ストーリーボードの構成だけで機能しているようです。
Murray Sagal

デフォルトでは、xcode 7では18に設定されています。しかし、それは断然最も簡単な解決策です!
static0886

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
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.