グループ化されたUITableViewヘッダーの高さを変更するにはどうすればよいですか?


88

テーブルビューのセクションヘッダーの高さを変更する方法を知っています。しかし、最初のセクションの前にデフォルトの間隔を変更するための解決策を見つけることができません。

今私はこのコードを持っています:

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

ここに画像の説明を入力してください


1
stackoverflow.com/questions/5441938/... ...このリンクを参照してください
Jitendra

@JitendraDeore正しい方向に私を導いてくれてありがとう
Circuitlego 2013

回答:


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
}

Obj-C:

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

8
Swiftでは、「CGFLOAT_MIN」は使用できません。代わりにCGFloat.minを使用してください。
tounaobun 2015年

4
CGFloat.minが-0.0000000000001のような負の値を返すため、CGFloat.minがクラッシュを引き起こしました
Pavel Gatilov 2015年

2
おそらくこれは衒学者ですが、CGFloat.minは非常に小さい数ではなく、非常に大きな負の数です。非常に少ない数が必要な場合は、イプシロンを使用します。
アレックスバード2016

6
Swift 3ではCGFloat.leastNormalMagnitude
ixany 2016年

1
アドバイス:でこの値を使用しないでくださいestimatedHeightForHeaderInSection。アプリがクラッシュします。
ペドロパウロアモリム2017

27

グループ化されたtableViewスタイルを使用する場合は、上部と下部のインセットを自動的に設定します。それらを回避し、内部インセット設定を回避するには、ヘッダーとフッターにデリゲートメソッドを使用します。0.0を返すことはありませんがtableViewCGFLOAT_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;
}

迅速

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 2013年

19

これはSwift4でうまくいきました。あなたの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
命の恩人、ここではそれを言及するために時間を割いてくれてありがとう:)
user2672052

13

あなたはこれを試すことができます:

の中に loadView

_tableView.sectionHeaderHeight = 0;

次に

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

ヘッダーにオブジェクトがない限り、削除する必要があります...

また、セクションヘッダーのサイズが必要な場合は、戻り値のみを変更してください。

セクションフッターを削除しない場合も同じです。

_tableView.sectionFooterHeight = 0;

そして

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

これは、iOS7のテーブルビューに関する私の問題に対して機能します。


3

self.tableView.tableHeaderView = [UIView new];追加した後、コードを削除する必要があります

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

footer私の場合、問題を引き起こしているのは高さです。手伝ってくれてありがとう。
pkc4 5619

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

次に、Auiviewをテーブルヘッダービューに直接渡すことができます。
Divyam shukla 2013

2

swift2.0では

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

        return yourHeight
    }

2

Swift4では

グループ化されたテーブルビューの余分な上部パディングを削除します。

ここでは、高さがゼロに割り当てられている場合、テーブルビューがデフォルトの上部マージンを取るため、0を指定できないため、セクションヘッダーの最小の高さとして高さが1に指定されます。

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