プレーンスタイルUITableView
を使用して、UITableView
がスクロールせずにすべてを表示できないほど十分な数のセルを使用する場合、セルの下の空のスペースにセパレータは表示されません。セルが数個しかない場合、それらの下の空のスペースにはセパレータが含まれます。
UITableView
を強制して空のスペースの区切り文字を削除する方法はありますか?そうでない場合は、動作を継承するのが難しくなるように、セルごとにセパレータが描画されたカスタム背景をロードする必要があります。
似たような質問 here を見つけましたが、実装でグループ化されたUITableView
を使用することはできません。
テーブルビューのフッターを定義することで、目的を達成できます。詳細については、この回答を参照してください。 ITableViewの下の余分なセパレータを削除
最も簡単な方法は、tableFooterView
プロパティを設定することです。
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
}
これをTableViewControllerに追加できます(これは任意の数のセクションで機能します)。
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
および十分でない場合、次のコードを追加しますtoo:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView() // it's just 1 line, awesome!
}
ダニエルからのリンクを使用して、より使いやすくするために拡張機能を作成しました。
//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
[v release];
}
いくつかのテストの後、サイズを0にすることができ、同様に機能することがわかりました。そのため、表の最後になんらかのマージンを追加しません。このハックをありがとうwkw。リダイレクトが好きではないので、ここに投稿することにしました。
Swiftバージョン
最も簡単な方法は、tableFooterViewプロパティを設定することです。
override func viewDidLoad() {
super.viewDidLoad()
// This will remove extra separators from tableview
self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
Swiftの場合:
self.tableView.tableFooterView = UIView(frame: CGRectZero)
IOS 7 SDKを使用する場合、これは非常に簡単です。
ViewDidLoadメソッドに次の行を追加するだけです。
self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
テーブルのseparatorStyle
をUITableViewCellSeparatorStyleNone
に(コードまたはIBで)設定すると、うまくいくはずです。
私は次を使用します:
UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];
ViewDidLoadで実行します。ただし、どこにでも設定できます。
以下は、この問題に対して私にとって非常にうまくいきました。
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
CGRect frame = [self.view frame];
frame.size.height = frame.size.height - (kTableRowHeight * numberOfRowsInTable);
UIView *footerView = [[UIView alloc] initWithFrame:frame];
return footerView; }
ここで、kTableRowHeightは行セルの高さであり、numberOfRowsInTableは表に含まれていた行の数です。
お役に立てば幸いです
ブレントン。