プレーンスタイルと1つのセクションのみを持つテーブルがあります。実装済みviewForHeaderInSection:
セクションヘッダーにカスタムビューを追加します。
テーブルセクションのヘッダービューと最初のセルの間に区切り線が表示されません。 [添付画像を見る]
私は何を間違えていますか?
カスタムヘッダーとフッターには、それらの下/上にセパレーターが含まれていません。カスタムビューでセパレータを自分で実装する必要があります(または、グループ化されたスタイルに切り替えます。これにより、カスタムヘッダー/フッターがある場合でもグループの上下にグループのアウトラインが表示されます)。
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];
通常のテーブルビューセルのように表示しようとしている場合は、おそらくヘッダービューの上部にも追加する必要があります。
テーブルのヘッダーとテーブルの最初の行の間だけにスペースを与えたい場合は、使用できます
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;
_
+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];
}
セクションの上部(ヘッダーの後)にセパレーターが必要な場合、indexOfHiddenRow
は0
になります。セクションの下部(フッターの前)に配置する場合は、[self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1
になります。
tableView:cellForRowAtIndexPath:
内で、非表示の行に対して[UITableViewCell new]
を返すだけです(表示されないため、フレームなどを設定する必要はありません)。 UITableViewDataSource
およびUITableViewDelegate
メソッドでいくつかの-1
インデックス調整を行う必要があるかもしれませんが、動作します(iOS 7でテスト済み)and一貫性を保証しますスタイリング(独自の「偽の」セパレータを描画する必要はありません。これは、システムで描画されるUITableView
セパレータです)。
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);
}
}
ヘッダービューと最初の行の間にセパレーターを追加します。
- (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;
}