UITableViewの下の余分なセパレーターを削除する


714

4行のテーブルビューを設定しても、塗りつぶされた行の下にセパレータ行(または余分な空白セル)が残っています。

これらのセルを削除するにはどうすればよいですか?

UITableViewの追加の区切り線の画像

回答:


1505

インターフェイスビルダー(iOS 9以降)

UIViewをテーブルにドラッグするだけです。ストーリーボードでは、カスタムセルの下の上部に配置されます。「フッター」という名前を付けることをお勧めします。

ここでは明確にするために緑色で表示されていますが、おそらくクリアな色が必要です。

高さを調整することにより、必要に応じて、テーブルの「ボトムバウンス」の処理方法に影響を与えることができます。(通常、高さゼロは問題ありません)。

ここに画像の説明を入力してください


プログラムでそれを行うには:

迅速

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}

Objective-C

iOS 6.1以降

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [UIView new];
}

または、必要に応じて

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

歴史的にiOSで:

テーブルビューコントローラーに追加...

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // This will create a "invisible" footer
     return CGFLOAT_MIN;
 }

そして必要に応じて...

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{        
    return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}

説明とコードが逆になっていると思います。とにかく、これは私にとってはうまくいきました。私はグループ化されたテーブルで「実際の」フッターのみを使用するので、コードの周りに(tableView.style!= UITableViewStyleGrouped){}を追加しました。グループ化されていないテーブルはすべて影響を受けず、グループ化されていないテーブルはすべて余分なセルを失います。
arlomedia

上記のメモに続いて、viewForFooterInSectionメソッドに条件を設定する場合は、メソッドがUIViewまたはnilを返すことを確認する警告を追加します。誤ってvoidを返すと、アプリがクラッシュします。
arlomedia 2012

4
@Mathieuこれは、テーブルにカスタムフッターがある場合、テーブルビューを埋めるための「ファントム」行を作成しないため機能します。したがって、フッターとして使用する空のビューを作成し、高さを0に近く設定します(ゼロにすることはできません。そうしないと、iOSでレンダリングされません)。この簡単なトリックで、デフォルトの動作を変更します。
J.コスタ

2
@ j.Costa:uitableviewの作成中にソリューションが機能するのは1回だけです。最後のセルをクリックした後、あなたのソリューションはより良くありません。答えを改善してください。

3
使用tableFooterViewテーブルはまだその細胞下コンテンツ予想として、葉を行の最後のセルにセパレータ。ヒストリカルな方法を使用すると、最後のセパレーターがなくなり、全体的に見栄えがよくなります。
James Kuang

128

グループ化されたテーブルスタイルを使用せずにこれを実行する別の方法を次に示します。ヘッダーとフッターをテーブルに追加すると(おそらくチェックされていないため、いずれかで十分です)、セパレーターがフィラー/空白行から消えます。

私はこれに偶然出会いました。テーブルの上部と下部に少しスペースをとり、肉の指でテーブルセルではなくボタンを押すリスクを減らしたいからです。空白のビューをヘッダーとフッターとして貼り付ける方法は次のとおりです。任意の高さを使用しても、余分な区切り線は削除されます。

- (void) addHeaderAndFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.myTableView setTableHeaderView:v];
    [self.myTableView setTableFooterView:v];
    [v release];
}

@Casebashへの応答として、アプリのコード(iTunesストアの「AcmeLists」リストマネージャー...)に戻り、addHeaderAndFooterメソッドを短絡して確認しました。それがなければ、余分な行セパレーターがあります。コードを使用すると、このウィンドウスナップに表示されるものが表示されます。テーブルの行セパレータの画像はありません。なぜそれがうまくいかなかったのかわかりません。さらに、テーブルビューにカスタムフッターがある場合、その下の空白行の行セパレーターの描画を必ず​​停止する必要があることは、私には理にかなっています。それは恐ろしいでしょう。参考までに、画面に表示できるよりも多くの行があるテーブルと、2つの行があるテーブルを調べました。どちらの場合も、無関係なセパレータはありません。

おそらく、カスタムビューは実際には追加されていません。これを確認するには、背景色をなど以外clearColorに設定します[UIColor redColor]。テーブルの下部に赤いバーが表示されない場合は、フッターが設定されていません。


1
IBでもこれを行うことができます。ただ、テーブルビューの下部にあるのUIViewをドラッグして、1に高さを設定
Ortwin Gentz

70

Swiftの UITableViewで空の行の余分な区切り線を削除する

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTableview.tableFooterView = UIView()
}

34

wkwを拡張したい回答ます:

高さ0のフッターのみを追加するだけでうまくいきます。(SDK 4.2、4.4.1でテスト済み)

- (void) addFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];

    [self.myTableView setTableFooterView:v];
}

またはさらに簡単-テーブルビューを設定する場所に、次の行を追加します。

//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];

またはさらに簡単-セパレータを単に削除するには:

[_tableView setTableFooterView:[UIView new]];

再びwkwに感謝します:)


これが正解です。他の方法の最後の行は行区切り記号なしのままです
Ankush

22

ストーリーボードを使用するiOS 7以降の場合

ドラッグ&UIViewあなたにUITableViewフッターなど。フッタービューの高さを0に設定します。


18

これを試して。それは私のために働きました:

- (void) viewDidLoad
{
  [super viewDidLoad];

  // Without ARC
  //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}


11

Swiftを使用している場合は、次のコードを、テーブルビューを管理するコントローラーのviewDidLoadに追加します。

override func viewDidLoad() {
    super.viewDidLoad()

    //...

    // Remove extra separators
    tableView.tableFooterView = UIView()
}

8

最後に空のフッターを追加するだけで、空のセルが非表示になりますが、見た目も非常に醜くなります。

tableView.tableFooterView = UIView()

ここに画像の説明を入力してください

より良い方法があります。フッターと空のセルも表示されなくなるため、テーブルビューの最後に1ポイントの線を追加します。

let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView

ここに画像の説明を入力してください


非常に素晴らしい入力ですが、最後のセルの下部に厚いセパレーターの色を付ける必要はありません。代わりに、セルの背景色を同じにするだけで、消えます。
グスタボバイオッチコスタ2017

しかし、あなたは好む。しかし、ちょっと「未完成」のセパレータはかなり見苦しく見えると思います。
ダーコ


7

J.コスタのソリューションの前進:次のコード行を置くことにより、テーブルにグローバルな変更を加えることができます。

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];

最初の可能なメソッドの内部(通常はAppDelegate、in:application:didFinishLaunchingWithOptions:メソッド)。


2
これに注意してください。意図したフッターが上書きされて、正気を疑って1〜2日過ごす場合があります。また、tableFooterViewはUI_APPEARANCE_SELECTORでマークされていないため、実際の動作はいつでも変更される可能性があります。
mwright

6

私はこの質問が受け入れられた答えであることを知っていますが、私はここに余分な区切り線を非表示にする方法のさまざまな方法を入れました UITableView

あなたは隠すことができます tableViewの標準の区切り線をして、各セルの上部にカスタム線を追加できます。

更新:

カスタムセパレーターを追加する最も簡単な方法はUIView、1pxの単純な高さを追加することです:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];

または

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

または

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

または 私が今までに好きな最も簡単な方法は

self.tableView.tableFooterView = [[UIView alloc] init];

いずれかを試してください。


6

この質問に対する答えはたくさんあります。それらのほとんどは、UITableViewtableFooterView属性を操作するため のものであり、これは空の行を非表示にする適切な方法です。便宜上、Interface Builderから空の行をオン/オフできるようにする単純な拡張を作成しました。この要旨ファイルから確認できます。あなたの時間を少し節約できるといいのですが。

extension UITableView {

  @IBInspectable
  var isEmptyRowsHidden: Bool {
        get {
          return tableFooterView != nil
        }
        set {
          if newValue {
              tableFooterView = UIView(frame: .zero)
          } else {
              tableFooterView = nil
          }
       }
    }
}

使用法:

tableView.isEmptyRowsHidden = true

ここに画像の説明を入力してください


5

uitableview余分な区切り線を隠す余分な区切り線をSwift 3.0で隠す

 self.tbltableView.tableFooterView = UIView(frame: .zero)

5

最後のセルの後にセパレーターが必要ない場合は、フッターにゼロに近いがゼロ以外の高さが必要です。

あなたのUITableViewDelegate

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

1
見事!私のために働いた!!
アントニーラフェル


3

背景色として目的のセパレーター色、幅100%、高さ1pxのビューをx0 y-1の位置でtableViewCellに追加するだけです。tableViewCellがサブビューをクリップしないことを確認してください。代わりにtableViewがクリップする必要があります。

そのため、コードやIBごとにハックすることなく、既存のセル間でのみシンプルで機能する絶対的なセパレータを取得できます。

注:垂直方向のトップバウンスでは、最初のセパレーターが表示されますが、それは問題ではないので、iOSのデフォルトの動作です。


3

テーブルビューを使用して、固定数の固定高さの行を表示していたので、サイズを変更してスクロールできないようにしました。


3

プログラムでUItableviewの下部から余分な区切り線を削除するには、次の2行のコードを書き留めれば、余分な区切り線が削除されます。

tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;

このトリックはいつも私のために働いています、自分で試してください。


2

受け入れられた回答(iOS 9以降、Swift 2.2)を1つ実装することに幸運がありました。私は実装しようとしました:

self.tableView.tableFooterView = UIView(frame: .zero)

しかし、私には何の影響もありませtableViewんでしたUITableViewController。私が使用していたという事実と関係があるのではないかと思います。

代わりに、viewForFooterInSectionメソッドをオーバーライドするだけで済みました(tableFooterView他の場所には設定しませんでした)。

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return UIView(frame: .zero)
}

これはtableView、1つのセクションのある場合にうまく機能しました(複数のセクションがある場合は、最後のセクションを指定する必要があります)。


2

セクションが1つしかない場合は、テーブルビューのスタイルを "プレーン"から "グループ化"に設定するのが最も簡単な方法です。(画像を参照)

グループ化されたTableView

セクションがさらにある場合は、ヘッダーの高さをゼロに設定する必要がある場合があります(お客様/お客様/プロジェクトマネージャーの好みによる)

より多くのセクションがあり、ヘッダーを混乱させたくない場合(たとえそれが最も単純なケースでは1行だけであっても)、前の回答で説明したように、UIViewをフッターとして設定する必要があります)


2

Swift 4.0拡張

ストーリーボードのほんの少しの拡張:

ここに画像の説明を入力してください

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}

2

すばやく簡単なSwift 4ウェイ。

override func viewDidLoad() {
     tableView.tableFooterView = UIView(frame: .zero)
}

静的細胞がある場合。インスペクターウィンドウからセパレーターをオフにすることもできます。(これは、セパレータが必要な場合は望ましくありません。その場合、上記の方法を使用してください) インスペクターウィンドウ


新しいUIViewをtableFooterViewに設定することは既に10回回答されており、理由、より良いコード(が不足しているsuper.viewDidLoad())に関するより良い説明があり、wikiの回答の上部に含まれています。すべてのセパレータを削除することに関しては、それはこの質問が本当にそういうことではないので、最後の編集をロールバックするか、回答を完全に削除するか、あるいはその両方を行ってください。
クール2018

1

UITableviewの不要なスペースを削除する場合は、以下の2つの方法を使用できます

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}

1

私は全体的に役立つこの小さなテーブルビュー拡張機能を追加しました

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}

1

これでお試しください

以下のためのObjective C

- (void)viewDidLoad 
 {
  [super viewDidLoad];
  // This will remove extra separators from tableview
  self.yourTableView.tableFooterView = [UIView new];
}

スウィフト

override func viewDidLoad() {
 super.viewDidLoad()
 self.yourTableView.tableFooterView = UIView()
}

0

これを試して

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];

0

UIKitときに空のセルを作成しませんtableView持っていますtableFooterView。したがって、トリックを作成し、高さ0のUIViewオブジェクトをのフッターとして割り当てることができますtableView

tableView.tableFooterView = UIView()

0

場合にはあなたが持っているsearchbar中で、あなたのview(例えば結果の数を制限するために)、あなたはまたに次のように追加する必要がありますshouldReloadTableForSearchStringし、shouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];

0

スウィフト(私は4.0を使用しています)では、カスタム作成することによって、これを達成することができUITableViewCell、クラス、およびメソッドを。次に、すべてを0にします。(テーブルビューのあるメインクラスの背景はクリアです)色。overridingsetSelectedseparator insets

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // eliminate extra separators below UITableView
    self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.