web-dev-qa-db-ja.com

ヘッダーと最初のセルの分離-単純なUITableViewで

プレーンスタイルと1つのセクションのみを持つテーブルがあります。実装済みviewForHeaderInSection:セクションヘッダーにカスタムビューを追加します。

テーブルセクションのヘッダービューと最初のセルの間に区切り線が表示されません。 [添付画像を見る]

alt text

私は何を間違えていますか?

30
Abhinav

カスタムヘッダーとフッターには、それらの下/上にセパレーターが含まれていません。カスタムビューでセパレータを自分で実装する必要があります(または、グループ化されたスタイルに切り替えます。これにより、カスタムヘッダー/フッターがある場合でもグループの上下にグループのアウトラインが表示されます)。

33
Jeremy Fuller

Jeremyが答えで指摘しているように、iOSはヘッダー/フッターの上/下にセパレーターを追加しません。 UIViewを使用して自分で線を作成することができます。

ヘッダービューに標準的なセパレータビューを追加するコードは次のとおりです。

CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-1, 320, 1);
seperatorView = [[[UIView alloc] initWithFrame:sepFrame] autorelease];
seperatorView.backgroundColor = [UIColor colorWithWhite:224.0/255.0 alpha:1.0];
[headerView addSubview:seperatorView];

通常のテーブルビューセルのように表示しようとしている場合は、おそらくヘッダービューの上部にも追加する必要があります。

41
JosephH

テーブルのヘッダーとテーブルの最初の行の間だけにスペースを与えたい場合は、使用できます

tableView:heightForHeaderInSection:(NSInteger)sectionのメソッドで

_if(section ==0)
    return 3; // (space u want to give between header and first row);

return 10; //(ur section header height)
_

tableView:viewForHeaderInSection:(NSInteger)sectionのメソッドで

_  UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];
  headerView.backgroundColor = [UIColor clearColor];   // use your own design

  return headerView;
_
11
Usman Nisar

+1の既存の行数をtableView:numberOfRowsInSection:で返すことにより、セパレータを追加するセクションに余分な「非表示」行を追加します。次に、次のメソッドを追加します。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ( indexPath.section == sectionOfHiddenRow && indexPath.row == indexOfHiddenRow )
        return 0.f;
    else
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

セクションの上部(ヘッダーの後)にセパレーターが必要な場合、indexOfHiddenRow0になります。セクションの下部(フッターの前)に配置する場合は、[self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1になります。

tableView:cellForRowAtIndexPath:内で、非表示の行に対して[UITableViewCell new]を返すだけです(表示されないため、フレームなどを設定する必要はありません)。 UITableViewDataSourceおよびUITableViewDelegateメソッドでいくつかの-1インデックス調整を行う必要があるかもしれませんが、動作します(iOS 7でテスト済み)and一貫性を保証しますスタイリング(独自の「偽の」セパレータを描画する必要はありません。これは、システムで描画されるUITableViewセパレータです)。

5
devios1

UITableViewCellをいくつかのセパレーターメソッド(Swift)で拡張しました。それらを使用して、ヘッダーにセパレータを追加したり、通常のセルからセパレータを削除したりできます。私はそれが一部の人々に役立つことを願っています。

public extension UITableViewCell
{
    func addSeparator(y: CGFloat, margin: CGFloat, color: UIColor)
    {
        let sepFrame = CGRectMake(margin, y, self.frame.width - margin, 0.7);
        let seperatorView = UIView(frame: sepFrame);
        seperatorView.backgroundColor = color;
        self.addSubview(seperatorView);
    }

    public func addTopSeparator(tableView: UITableView)
    {
        let margin = tableView.separatorInset.left;

        self.addSeparator(0, margin: margin, color: tableView.separatorColor!);
    }

    public func addBottomSeparator(tableView: UITableView, cellHeight: CGFloat)
    {
        let margin = tableView.separatorInset.left;

        self.addSeparator(cellHeight-2, margin: margin, color: tableView.separatorColor!);
    }

    public func removeSeparator(width: CGFloat)
    {
        self.separatorInset = UIEdgeInsetsMake(0.0, width, 0.0, 0.0);
    }

}
2
Jorg B Jorge

ヘッダービューと最初の行の間にセパレーターを追加します。

- (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {

return 41; 
}


- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {

self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR];

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]];
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1);
[self.headerView addSubview:self.separator];
return self.headerView;

}
1
YaBoiSandeep