2010-11-29 15 views
26

私は、プレーンスタイルとセクションが1つしかないテーブルを持っています。私はviewForHeaderInSection:を実装して、セクションヘッダーにカスタムビューを追加しました。ヘッダーと最初のセルの間の分離 - プレーンなUITableView

テーブルセクションのヘッダービューと最初の セルの間に区切り線がありません。私は間違って何をやっている

alt text

[添付画像を参照してください]?

答えて

29

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

+0

グループ化されたスタイルに切り替えると、そのトリックが行われました。 –

+0

グループ化されたスタイルに切り替えるには? – Imran

+0

セパレータの高さを取り除くことはできますか? – Nil

40

ジェレミーは答えたので、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]; 

あなたはそれが通常のテーブルビューセルのように見えるようにしようとしている場合、あなたはおそらく1つを追加する必要がありますヘッダービューの上部にも表示されます。あなただけのテーブルヘッダとテーブルの最初の行の間にスペースを与えたい場合は

+1

ありがとう、便利なコードスニペット。興味のある人は、awakeFromNib()メソッドのカスタムヘッダーのViewクラスに配置しました。 – Tim

+0

@ジェフ私は同じことをしました。 –

9

あなたが追加tableView:viewForHeaderInSection:(NSInteger)section

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

    return headerView; 
5

の方法で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) 

の方法で

を使用することができますセパレータを追加するセクションに追加の「隠し」行+1を返します。既存の行数はになります。あなたは(ヘッダの後)セクションの一番上にセパレーターをしたい場合は、indexOfHiddenRow0なります

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

:その後、次のメソッドを追加します。セクションの一番下(フッターの前)にしたい場合は[self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1になります。

tableView:cellForRowAtIndexPath:の中には、非表示の行には[UITableViewCell new]が返されます(表示されないため、フレームなどを設定する必要はありません)。 UITableViewDataSourceUITableViewDelegateの方法で-1のインデックス調整を行う必要があるかもしれませんが、それは機能します(iOS 7でテスト済み)。は一貫したスタイリングを保証します(独自の「擬似」セパレータを描く必要はありません。細く描かれたUITableViewセパレータ)。

+1

これは実際には正しい方法です。ちょうどテストされ、それは動作します。 –

+1

OK、一貫したスタイリングでその部分が私を納得させました。 +1 –

+0

はハックですが華麗なアイデアのようです。 –

1

ヘッダービューと最初の行の間に区切り記号を追加します。 - セクションのヘッダーの表示で代行メソッドがサブビューself.separatorを追加します。// @ property(非原子的、強い)UIImageView * separator;

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

私はSwiftのいくつかのセパレータメソッドでUITableViewCellを拡張しました。それらを使用して、ヘッダにセパレータを追加したり、通常のセルからセパレータを削除したりすることができます。私はそれが何人かの人々を助けることを望む。

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

}