web-dev-qa-db-ja.com

UITableViewに空のセル間のセパレーターを強制的に非表示にできますか?

プレーンスタイルUITableViewを使用して、UITableViewがスクロールせずにすべてを表示できないほど十分な数のセルを使用する場合、セルの下の空のスペースにセパレータは表示されません。セルが数個しかない場合、それらの下の空のスペースにはセパレータが含まれます。

UITableViewを強制して空のスペースの区切り文字を削除する方法はありますか?そうでない場合は、動作を継承するのが難しくなるように、セルごとにセパレータが描画されたカスタム背景をロードする必要があります。

似たような質問 here を見つけましたが、実装でグループ化されたUITableViewを使用することはできません。

209
jessecurry

テーブルビューのフッターを定義することで、目的を達成できます。詳細については、この回答を参照してください。 ITableViewの下の余分なセパレータを削除

118
Daniel Hepper

IOS 7. *およびiOS 6.1の場合

最も簡単な方法は、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];
}
218
J. Costa

Swiftの場合:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.tableFooterView = UIView()  // it's just 1 line, awesome!
}
130
Sebastian

ダニエルからのリンクを使用して、より使いやすくするために拡張機能を作成しました。

//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
    v.backgroundColor = [UIColor clearColor];
    [self.tableView setTableFooterView:v];
    [v release];
}

いくつかのテストの後、サイズを0にすることができ、同様に機能することがわかりました。そのため、表の最後になんらかのマージンを追加しません。このハックをありがとうwkw。リダイレクトが好きではないので、ここに投稿することにしました。

67
Sauleil

Swiftバージョン

最も簡単な方法は、tableFooterViewプロパティを設定することです。

override func viewDidLoad() {
    super.viewDidLoad()
    // This will remove extra separators from tableview
    self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
24
King-Wizard

Swiftの場合:

self.tableView.tableFooterView = UIView(frame: CGRectZero)
11
Segev

IOS 7 SDKを使用する場合、これは非常に簡単です。

ViewDidLoadメソッドに次の行を追加するだけです。

self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
8
Salmo

テーブルのseparatorStyleUITableViewCellSeparatorStyleNoneに(コードまたはIBで)設定すると、うまくいくはずです。

7
duncanwilcox

私は次を使用します:

UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];

ViewDidLoadで実行します。ただし、どこにでも設定できます。

5
Dare2Dream

以下は、この問題に対して私にとって非常にうまくいきました。

- (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は表に含まれていた行の数です。

お役に立てば幸いです

ブレントン。

0
Callaghan001