現在、UITableView
をView Controllerの最上部ではなく、別の場所に配置しようとしています。これにより、ヘッダーをナビゲーションバーに合わせて上部に追加しようとしていますが、コントローラーの上部にないため、これは必要ありません。
UITableView
の左上隅にセルを配置したい場合、セルは配置されません。
セルが正しい場所にあるようにテーブルビューを上に移動するだけの場合、別の問題が発生します-スクロールするとセルがそこまで移動する可能性があります(ナビゲーションコントローラーの上に指があります)。
私が手放すと、はい-セルは検索バーのすぐ下に移動しますが、これは明らかにそれを上に移動する方法の問題です。
これをどうやってやるの?簡単な方法はありますか?
下にスクロールすると、UITableView
のセルが空のスペースに表示されますか?
その場合、問題は、ビューにあるNavigationコントローラーのためにUITableView
に追加されるインセットである可能性があります。スクロールが発生していないときにコンテンツがナビゲーションバーの下に配置されるように、テーブルビューにインセットが追加されます。テーブルをスクロールすると、コンテンツがスクロールして、透明なナビゲーションバーの下に表示されます。もちろん、この動作は、テーブルビューがナビゲーションバーのすぐ下から始まる場合にのみ必要ですが、ここではそうではありません。
注意すべきもう1つの点は、iOSがUIScrollView
またはその子孫(例:UITableView
およびUICollectionView
)である場合、ビュー階層の最初のビューに対してのみコンテンツインセットを調整することです。ビュー階層に複数のスクロールビューが含まれる場合、automaticallyAdjustsScrollViewInsets
は最初のビューのみを調整します。
この動作を変更する方法は次のとおりです。
a)Interface Builder
デフォルトではオンになっているIBの属性インスペクター(View Controllerが選択されている場合)には、「スクロールビューのインセットの調整」というプロパティがあります。このオプションをオフにします。
(画像提供 Dheeraj D )
どのXcodeバージョンがこのオプションを導入したかはわかりませんが(リリースノートでは見つけられませんでした)、少なくともバージョン5.1.1で利用可能です。
編集:混乱を避けるため、これはコメントで言及されている3番目のオプションでした
b)プログラムで
これを例に追加しますviewDidLoad
(Slavco Petkovskiの回答とCris Rのコメント)
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c)これは高齢者に関連する可能性があります
これを修正するには、次のいずれかを追加します
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
または、IBを使用していて、ナビゲーションバーが透明でない場合(スクリーンショットからはわかりません)
私はこれと同じ問題を抱えており、ある時点でそこにUIViewがあったと確信しています。テーブルビュー全体をコピーして削除し、再度貼り付けるだけで修正されました。
ストーリーボードでテーブルビューを選択し、スタイルが「グループ化」ではなく「プレーン」に設定されていることを確認します。この設定は、[属性インスペクター]タブで確認できます。
私の場合、ビュー階層のUITableViewの下にUILabelがありました。
私はそれを「前方」に動かし、空白が現れました。理由は定かではありませんが、このように機能します。tableViewの下に何かがあると、空白が非表示になります。
また、ストーリーボードのビューコントローラーインスペクターで「スクロールビューインセットを調整」をチェック/非チェックしてみてください。
上記のどれも役に立たなかった。しかし、これは役立った:
self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
'-64'の代わりに、ナビゲーションバーの高さに応じて他の数値を入力できます。
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;
}
確かに言うことはできませんが、プロトタイプセルの開始位置とUITableViewの上部の間に余分なUIViewが詰まっているようです。追加したテキスト/行を削除すると、私の画像はあなたのものとまったく同じに見えます。
上部の余分なスペースの原因はまだわかりませんが、UITableViewをスペースで削除して新しいスペースに置き換えると、スペースがなくなることがわかりました。
誤ってそこにUIViewをドラッグしていたはずですが、選択できなかったため削除できませんでした。
IOS 11でこれを行っている場合、自動的にAdjustsScrollViewInsetsは非推奨であるため動作しません。この投稿の回答に従って次のコードが機能しました: https://stackoverflow.com/a/44391269/5476481
if #available(iOS 11.0, *) {
tblView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
お役に立てれば。
ストーリーボードまたはxibでTableviewフレームを確認します。私のデフォルトではy位置の値があるため、バグ
私のアプリケーションでも、このような問題が発生しました。 tableViewの上端のインセットをゼロに設定しました。また、false
にautomaticallyAdjustsScrollViewInsets
を設定しようとしました。しかし、うまくいきませんでした。
最後に、実用的なソリューションを得ました。これが正しい方法なのかわかりません。しかし、heightForHeaderInSection
デリゲートメソッドの実装はうまくいきました。これを機能させるには、ゼロ以外の値を返す必要があります(ゼロを返すと、以前と同じスペースが表示されます)。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.1
}
私はこれをプログラムで行っており、他のすべてのサブビューを追加した後、addSubview(tableView)を一番下に移動するだけで問題が解決しました!
これが私のシミュレータではなくデバイスにのみ表示される理由はわかりませんが、少なくともどちらかの方法で簡単な解決策があります!
IOS 11以降では、Appleはプロパティを変更してコンテンツのインセットを調整しました。 contentInsetAdjustmentBehavior
を使用し、.never
を設定して、UICollectionView
、UIScrollView
、UITableView
の上の余分なスペースを削除します。
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
}
これがあなたのお役に立てば幸いです。
2017年、私のために働いているのは単にこの1行です
navigationController?.navigationBar.isTranslucent = false
なぜそれがそれに影響を与えるのかわからない。おそらく誰かが説明できるでしょう。しかし、これはほとんどの人が求める答えであると確信しています。
UITableViewがView Controllerの最初のサブビューでない限り、空のスペースは表示されません。
解決策:View Controllerの最初のサブビューとして、非表示/クリアビューオブジェクト(ビュー、ラベル、ボタンなど)を追加します(UITableViewと同じレベルですが、その前)。
私にとっては、プロトタイプセルをメニューからテーブルビューにドラッグしたときに問題が発生しました。それを削除して、テーブルビューインスペクターのプロパティでプロトタイプセルを1に設定しました
これに対する解決策を見つけました。
Tableviewとclic Editorを選択するだけ->配置->前に送る
それは私のために働いて、それがあなたのすべてを助けることを願っています。
私の場合、ContainerViewControllerを使用してUITableViewControllerを入れていました。 ContainerViewControllerを削除した後。問題はなくなります。
Remove tableHeaderViewおよびtableFooterViewで試してください
var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tblView.tableHeaderView = UIView(frame: frame)
tblView.tableFooterView = UIView(frame: frame)
また、tableViewが階層の最後のビューではないという問題もありました。私の場合、私は上にビューがありましたが(互いに重なり合っていなかったとしても)、階層内のtableViewの上にドラッグし、それで作成しました。
underTopBar
プロパティがオフになるように、ストーリーボードでViewControllerの拡張エッジを設定します。
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
私の場合、コンテナビューを使用していました(メインビュー->コンタナービュー-> UITableView)
上部の余分なスペースは、デバイスの通知バー(時間を表示する場所、バッテリー)のスペースのようなものだと思います。本当にそうです、それは仮定ではありません。
私がしたことは、UI Builderからでした:
Xcode 8のバグ…
Storyboard UITableViewスタイルがPlainに設定されている場合、最初にこれを試してください。
テーブルのスタイルを「グループ化」に設定してから、「プレーン」に戻します。これにより、UITableViewの先頭にあるアプリのスペースが削除されました。
同じ問題を抱えていました。 viewDidLoadに以下を追加して解決しました。
self.extendedLayoutIncludesOpaqueBars = true
このコードを使用して、テーブルが作成される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];
UIViewは、テーブルの上下に挿入できます(ドラッグアンドドロップ)。プロパティを透明、高さ1ピクセルに設定します。これは、セルの前の余分なパディングを削除するためです。