web-dev-qa-db-ja.com

UITableViewの下に余分な区切り記号を削除

4行のテーブルビューを設定したとき、塗りつぶされた行の下にまだ余分な区切り線(または余分な空白セル)があります。

これらの細胞をどうやって取り除くのですか?

image for extra separator lines in UITableView

666
RoundOutTooSoon

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

UIViewをテーブルにドラッグするだけです。ストーリーボードでは、カスタムセルの下の一番上に配置されます。あなたはそれを「フッター」と名付けることを好むかもしれません。

ここではわかりやすくするために緑色で表示されています。あなたはおそらく明確な色が欲しいでしょう。

好みに応じて、高さを調整することで、テーブルの「下のバウンス」の処理方法に影響を与えることができます。 (高さゼロは通常大丈夫です)。

enter image description here


プログラム的に行うには

迅速

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では歴史的に:

Table View Controllerに追加します...

- (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];
}
1434
J. Costa

これをグループ化されたテーブルスタイルなしで実行するもう1つの方法がありますが、おそらくこれは推測できないはずです。追加中 ヘッダと テーブルへのフッター (おそらくどちらか一方で十分、チェックしていません) セパレーターをフィラー/ブランク行から消します。

私はこれに遭遇しました。テーブルの上と下に小さなスペースを設けて、太った指の付いたテーブルセルではなくボタンを押す危険性を減らすためです。これはヘッダーとフッターとして空白のビューを固定する方法です。好きな高さを使用しても、余分な区切り線は削除されます。

- (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]に設定します。テーブルの下部に赤いバーが表示されない場合は、フッターが設定されていません。

128
wkw

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

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

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をありがとうございます:)

34

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

フッターとしてUIViewUITableViewにドラッグするだけです。フッタービューの高さを0に設定します。

22
Kyle Clegg

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

- (void) viewDidLoad
{
  [super viewDidLoad];

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

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

Swiftの場合:

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

最後に空のフッターを追加するだけで空のセルを隠すことができますが、見た目もかなり醜くなります。

tableView.tableFooterView = UIView()

enter image description here

より良いアプローチがあります:フッターと空のセルももう表示されないのでテーブルビューの最後に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

enter image description here

8
Darko

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

override func viewDidLoad() {
    super.viewDidLoad()

    //...

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

Swift 4.0ではCGRectZeroは推奨されないので、CGRect.zeroを使用する必要があります。

8

J. Costaの解決策を前進させる:このコード行を入れることで、テーブルをグローバルに変更することができます。

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

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

7
o.shnn

私はこの質問が答えを受け入れたことを知っていますが、私はここでUITableViewの余分な区切り線を隠す方法について様々な方法を置きます。

tableViewの標準的な区切り線を非表示にして、各セルの上部にカスタム行を追加することができます。

更新:

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

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

OR私が今までにない最高でシンプルな方法は

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

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

6
iPatel

このコードを追加するだけです(Swift)。 。

tableView.tableFooterView = UIView()
6
roy

swift 3.0では、uitableviewの追加の区切り線が非表示になります。

 self.tbltableView.tableFooterView = UIView(frame: .zero)
5
Parth Changela

Swiftは次のものとうまく連携します。

tableView.tableFooterView = UIView()
4

最後のセルの後に区切り文字が不要な場合は、フッターにゼロに近いがゼロ以外の高さが必要です。

あなたのUITableViewDelegateで:

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

あなたはこの質問に対するたくさんの答えを見つけるかもしれません。それらのほとんどは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

enter image description here

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

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

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

3

TableViewCellのx0 y-1の位置に、背景色、幅100%、高さ1ピクセルの希望の区切り色でビューを追加するだけです。 tableViewCellがサブビューをクリップしないようにしてください。代わりに、tableViewがクリップする必要があります。

したがって、コードやIBごとにハックを加えることなく、既存のセル間でのみ簡単で実用的なセパレータを使用できます。

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

3
maaalex

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

3
Casebash

セクションが1つしかない場合は、最も簡単で簡単な方法は、Table View Styleを「Plain」から「Grouped」に設定することです。 (画像を参照)

TableView Grouped

もっとセクションがある場合は、ヘッダの高さをゼロに設定する必要があるかもしれません(あなた/あなたの顧客/あなたのプロジェクトマネージャの好みによって)

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

1
Gefilte Fish

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

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

Swift 4.0エクステンション

ストーリーボードを少しだけ拡張したものです。

enter image description here

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

早くて簡単Swift 4 way。

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

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

1
Alix

これでやってみる

目的C

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

Swift

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

私はいくつかの受け入れられた答え(iOS 9+、Swift 2.2)を実装して運が良かった。私は実装しようとしました:

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
BAP

全体に役立つこの小さなTableview拡張機能を追加しました

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

searchbarviewがある場合(例えば、結果の数を制限するため)、shouldReloadTableForSearchStringshouldReloadTableForSearchScope:に以下を追加する必要があります。

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

UIKittableViewを持つ場合、tableFooterViewは空のセルを作成しません。そのため、トリックを作成し、高さゼロのUIViewオブジェクトをtableViewのフッターとして割り当てることができます。

tableView.tableFooterView = UIView()
0
iMuzahid

これを試して

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

Swift(私は4.0を使用しています)では、カスタムのUITableViewCellクラスとoverridingsetSelectedメソッドを作成することでこれを実現できます。 separator 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)
}
0
chillbumps