web-dev-qa-db-ja.com

UITableViewのセルの前の空のスペースを削除します

現在、UITableViewをView Controllerの最上部ではなく、別の場所に配置しようとしています。これにより、ヘッダーをナビゲーションバーに合わせて上部に追加しようとしていますが、コントローラーの上部にないため、これは必要ありません。

UITableViewの左上隅にセルを配置したい場合、セルは配置されません。

セルが正しい場所にあるようにテーブルビューを上に移動するだけの場合、別の問題が発生します-スクロールするとセルがそこまで移動する可能性があります(ナビゲーションコントローラーの上に指があります)。

私が手放すと、はい-セルは検索バーのすぐ下に移動しますが、これは明らかにそれを上に移動する方法の問題です。

これをどうやってやるの?簡単な方法はありますか?

165
hetelek

下にスクロールすると、UITableViewのセルが空のスペースに表示されますか?

その場合、問題は、ビューにあるNavigationコントローラーのためにUITableViewに追加されるインセットである可能性があります。スクロールが発生していないときにコンテンツがナビゲーションバーの下に配置されるように、テーブルビューにインセットが追加されます。テーブルをスクロールすると、コンテンツがスクロールして、透明なナビゲーションバーの下に表示されます。もちろん、この動作は、テーブルビューがナビゲーションバーのすぐ下から始まる場合にのみ必要ですが、ここではそうではありません。

注意すべきもう1つの点は、iOSがUIScrollViewまたはその子孫(例:UITableViewおよびUICollectionView)である場合、ビュー階層の最初のビューに対してのみコンテンツインセットを調整することです。ビュー階層に複数のスクロールビューが含まれる場合、automaticallyAdjustsScrollViewInsetsは最初のビューのみを調整します。

この動作を変更する方法は次のとおりです。

a)Interface Builder

  • View Controllerを選択します
  • 属性インスペクターを開く
  • デフォルトではオンになっているIBの属性インスペクター(View Controllerが選択されている場合)には、「スクロールビューのインセットの調整」というプロパティがあります。このオプションをオフにします。


    (画像提供 Dheeraj D

どのXcodeバージョンがこのオプションを導入したかはわかりませんが(リリースノートでは見つけられませんでした)、少なくともバージョン5.1.1で利用可能です。

編集:混乱を避けるため、これはコメントで言及されている3番目のオプションでした

b)プログラムで

これを例に追加しますviewDidLoadSlavco Petkovskiの回答とCris Rのコメント)

// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;

// Swift
self.automaticallyAdjustsScrollViewInsets = false

c)これは高齢者に関連する可能性があります

これを修正するには、次のいずれかを追加します

tableView.contentInset = UIEdgeInsetsZero

//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero

または、IBを使用していて、ナビゲーションバーが透明でない場合(スクリーンショットからはわかりません)

  • View Controllerを選択します
  • 属性インスペクターを開く
  • View Controllerオプションの「エッジを延長」セクションで「トップバーの下」の選択を解除します
370
lekksi

私はこれと同じ問題を抱えており、ある時点でそこにUIViewがあったと確信しています。テーブルビュー全体をコピーして削除し、再度貼り付けるだけで修正されました。

70
irblue

ストーリーボードでテーブルビューを選択し、スタイルが「グループ化」ではなく「プレーン」に設定されていることを確認します。この設定は、[属性インスペクター]タブで確認できます。

31
netshark1000

私の場合、ビュー階層のUITableViewの下にUILabelがありました。

私はそれを「前方」に動かし、空白が現れました。理由は定かではありませんが、このように機能します。tableViewの下に何かがあると、空白が非表示になります。

また、ストーリーボードのビューコントローラーインスペクターで「スクロールビューインセットを調整」をチェック/非チェックしてみてください。

enter image description here

9
André Cytryn

上記のどれも役に立たなかった。しかし、これは役立った

self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)

'-64'の代わりに、ナビゲーションバーの高さに応じて他の数値を入力できます。

5
Tung Fam

UIRefreshControlが事前に追加されている場合があります。私はこのようなコードでこの問題を抱えています:

self.refreshControl = [[UIRefreshControl alloc] init];{
    [self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
                                             initWithString:@"Your string"]];
    [self.refreshControl addTarget:self
                            action:@selector(updateScreen)
                  forControlEvents:UIControlEventValueChanged];

}

ご覧のとおり、initの直後にself.refreshControllerを設定します

ただし、セットアップ後にrefreshControlを設定した場合、トップスペースは邪魔になりません。

UIRefreshControl *refreshControl  = [[UIRefreshControl alloc] init];{
    [self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
                                             initWithString:@"Your String"]];
    [self.refreshControl addTarget:self
                            action:@selector(updateScreen)
                  forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;
}
4
akaDuality

確かに言うことはできませんが、プロトタイプセルの開始位置とUITableViewの上部の間に余分なUIViewが詰まっているようです。追加したテキスト/行を削除すると、私の画像はあなたのものとまったく同じに見えます。

enter image description here

3
Mike S

上部の余分なスペースの原因はまだわかりませんが、UITableViewをスペースで削除して新しいスペースに置き換えると、スペースがなくなることがわかりました。

誤ってそこにUIViewをドラッグしていたはずですが、選択できなかったため削除できませんでした。

3
hetelek

Storyboardで、contentInsetstableviewNeverに設定します

enter image description here

IOS 11でこれを行っている場合、自動的にAdjustsScrollViewInsetsは非推奨であるため動作しません。この投稿の回答に従って次のコードが機能しました: https://stackoverflow.com/a/44391269/5476481

        if #available(iOS 11.0, *) {
            tblView.contentInsetAdjustmentBehavior = .never
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }

お役に立てれば。

3
Jacobo Koenig

ストーリーボードまたはxibでTableviewフレームを確認します。私のデフォルトではy位置の値があるため、バグ

2
Arthi

私のアプリケーションでも、このような問題が発生しました。 tableViewの上端のインセットをゼロに設定しました。また、falseautomaticallyAdjustsScrollViewInsetsを設定しようとしました。しかし、うまくいきませんでした。

最後に、実用的なソリューションを得ました。これが正しい方法なのかわかりません。しかし、heightForHeaderInSectionデリゲートメソッドの実装はうまくいきました。これを機能させるには、ゼロ以外の値を返す必要があります(ゼロを返すと、以前と同じスペースが表示されます)。

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    return 0.1
}
2
Anusha Kottiyal

私はこれをプログラムで行っており、他のすべてのサブビューを追加した後、addSubview(tableView)を一番下に移動するだけで問題が解決しました!

これが私のシミュレータではなくデバイスにのみ表示される理由はわかりませんが、少なくともどちらかの方法で簡単な解決策があります!

1
Austin Whitelaw

IOS 11以降では、Appleはプロパティを変更してコンテンツのインセットを調整しました。 contentInsetAdjustmentBehaviorを使用し、.neverを設定して、UICollectionViewUIScrollViewUITableViewの上の余分なスペースを削除します。

if #available(iOS 11.0, *) {

    // For scroll view
    self.scrollView.contentInsetAdjustmentBehavior = .never

    // For collection view
    self.collectionView.contentInsetAdjustmentBehavior = .never

    // For table view
    self.tableView.contentInsetAdjustmentBehavior = .never

} else {
    self.automaticallyAdjustsScrollViewInsets = false
}

これがあなたのお役に立てば幸いです。

1
Mayur Karmur

2017年、私のために働いているのは単にこの1行です

navigationController?.navigationBar.isTranslucent = false

なぜそれがそれに影響を与えるのかわからない。おそらく誰かが説明できるでしょう。しかし、これはほとんどの人が求める答えであると確信しています。

1
Dew Time

UITableViewがView Controllerの最初のサブビューでない限り、空のスペースは表示されません。

解決策:View Controllerの最初のサブビューとして、非表示/クリアビューオブジェクト(ビュー、ラベル、ボタンなど)を追加します(UITableViewと同じレベルですが、その前)。

1
jr.ong

私にとっては、プロトタイプセルをメニューからテーブルビューにドラッグしたときに問題が発生しました。それを削除して、テーブルビューインスペクターのプロパティでプロトタイプセルを1に設定しました

1
Junaid Ahmed

これに対する解決策を見つけました。

Tableviewとclic Editorを選択するだけ->配置->前に送る

それは私のために働いて、それがあなたのすべてを助けることを願っています。

0
Daniel Meza

私の場合、ContainerViewControllerを使用してUITableViewControllerを入れていました。 ContainerViewControllerを削除した後。問題はなくなります。

0
Sandeep Ahuja

スイフト5

Remove tableHeaderViewおよびtableFooterViewで試してください

var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tblView.tableHeaderView = UIView(frame: frame)
tblView.tableFooterView = UIView(frame: frame)
0
Vivek

また、tableViewが階層の最後のビューではないという問題もありました。私の場合、私は上にビューがありましたが(互いに重なり合っていなかったとしても)、階層内のtableViewの上にドラッグし、それで作成しました。

0
Sebyddd

underTopBarプロパティがオフになるように、ストーリーボードでViewControllerの拡張エッジを設定します。

0
JAHelia

I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.https://i.stack.imgur.com/vRNfV.png

0
NitinLandge

私の場合、コンテナビューを使用していました(メインビュー->コンタナービュー-> UITableView)

上部の余分なスペースは、デバイスの通知バー(時間を表示する場所、バッテリー)のスペースのようなものだと思います。本当にそうです、それは仮定ではありません。

私がしたことは、UI Builderからでした:

  • 完全なTable View Controllerを選択します
  • 属性インスペクターを開く
  • -> View Controller-> Layout-> "Select Fulls Full Screen"に移動します
0
Patricio Diego

Xcode 8のバグ…

Storyboard UITableViewスタイルがPlainに設定されている場合、最初にこれを試してください。

テーブルのスタイルを「グループ化」に設定してから、「プレーン」に戻します。これにより、UITableViewの先頭にあるアプリのスペースが削除されました。

0
Carl

同じ問題を抱えていました。 viewDidLoadに以下を追加して解決しました。

self.extendedLayoutIncludesOpaqueBars = true
0
Jose Carrillo

このコードを使用して、テーブルが作成されるviewDidLoadまたはviewDidAppearに使用できます。

// Remove blank space on header of table view
 videoListUITableView.contentInset = UIEdgeInsetsZero;

// The iOS device = iPhone or iPod Touch
CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

// Set the height of the table on the basis of number of rows
videoListUITableView.frame = CGRectMake(videoListUITableView.frame.Origin.x, videoListUITableView.frame.Origin.y, videoListUITableView.frame.size.width, iOSDeviceScreenSize.height-100);



// Hide those cell which doesn't contain any kind of data
self.videoListUITableView.tableFooterView = [[UIView alloc] init];
0
Vinod Joshi

UIViewは、テーブルの上下に挿入できます(ドラッグアンドドロップ)。プロパティを透明、高さ1ピクセルに設定します。これは、セルの前の余分なパディングを削除するためです。

0
Alexander