iOS7でUITableViewStyleGroupedスタイルのUITableViewの上部に余分なパディングがあるのはなぜですか


635

iOS7から、私UITableViewのスタイルの上部に追加のスペースがありますUITableViewStyleGrouped

次に例を示します。

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

テーブルビューは最初の矢印から始まり、説明のないパディングが35ピクセルあり、次に緑のヘッダーがUIView返されますviewForHeaderInSection(セクションは0です)。

この35ピクセルの量がどこから来ているのか、そして切り替えずにそれを取り除く方法を誰かが説明できますUITableViewStylePlainか?


注意:

iOS 11以降の場合:

tableView.contentInsetAdjustmentBehavior = .never

最新のiOS 7を使用していますか?これらのタイプの不整合の一部(すべてではなく、おそらくこれではない)は、後の開発プレビューで修正されました。知っておくべきこと:私は先延ばしにして問題のいくつかが消えた。
Dan Rosenstark 2013

ここで回答を確認してください-stackoverflow.com/a/18986158/1463604
Nishant

短い答えは、この余分なパディングはおそらくテーブルビューヘッダー(セクションヘッダーでUITableViewはない)によるものであり、高さ0.0のヘッダーを割り当てたくないということです。詳細については、stackoverflow.com / a / 31223403/1394534を確認してください。
Aurelien Porte 2015

30
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.0f, CGFLOAT_MIN)];注:rectの高さで使用する場合0.0f無視されます。したがって、私たちは可能な限りゼロに近いCGFloatを使用します(少なくとも私にとってはこれは「うまくいった」...理想的なソリューションではありません)。
AlejandroIván2015年

1
@AlejandroIvánあなたのコメントは私の夜になりました。グループ化されたプロトタイプを持つtableViewがあります。私はnumberSections = data.countを使用して、numberRows = 1を設定しています。heightForFooterInSectionを設定して、それぞれの間にクリーンなスペースを作り、何らかの理由で空のtableHeaderViewが表示されました。
Ryan Alexander

回答:


863

私は以下によって助けられました:

YouStoryboard.storyboard> YouViewController>属性インスペクター>オフ-スクロールビューインセットを調整します。

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


42
これは、edgeInset値を改ざんする代わりに、パディングを削除する正しい方法だと思います。
Hgeg 2013年

21
これは私にはうまくいきませんでした-上に不透明なnavBarがあり、これをオフにすると、その下のコンテンツがプッシュされます。
slycrel 2014年

5
カスタムを使用している場合は機能しませんcollectionview。(テーブルビューが内部にある場合collectionviewcell
Akshit Zaveri 2014

5
うまくいきませんでした。機能したのは、グループ化ではなくプレーンに切り替えることだけでした
シム

28
コンテナービュー内のTableViewControllerでこの問題が発生しました。このプロパティは、埋め込まれたTableViewControllerではなく、コンテナービューを含むビューコントローラーで直接設定する必要がありました。その後、うまくいきました。
アンディモーティマー

325

私はそれをもう少し試しましたが、これはtableViewを設定することの副作用のようtableHeaderView = nilです。

私のtableViewには動的tableHeaderViewに表示されるがあるため、を非表示にする必要がある場合はtableHeaderView、の代わりにself.tableView.tableHeaderView = nil;を実行します。

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.01f)];

contentInset.topcontentInset.top動的にも使用するため、このソリューションはやや恣意的な設定よりも好きです。再計算するたびに余分な35pxを削除することを覚えておかなければならないのcontentInset.topは面倒です。


4
素晴らしい解決策!実際、コードのようにデフォルトのテーブルビューヘッダービューを削除するには、これを0.01fに設定する必要があります。
Simone Manganelli 2013

2
ところで、これはInterface Builderで1つのドラッグアンドドロップで行うこともできます。まあありがとう!:)
ルドルフアダムコビッチ2013年

8
あなたはこれのためのメダルに値します
Vaibhav Gautam 2013年

7
テーブルビューの上部にある0.01fの高さのビューは、その下にあるすべてのセルの位置がずれていることを意味します(最初のセルはYの原点が0.01で、次のセルはcell_height + 0.01のようになります)。これらのセルの内容ずれます。(Debug > Color Misaligned Imagesシミュレータでこれをオンにして、これを自分で確認してください。)そうしたくないのです。
Simon Whitaker 14

2
UITableViewHeaderFooterViewUIViewの代わりに使用することをお勧めします。とCGFLOAT_MIN同じように機能します0.01fが、理論的にはより優れています。
Jaybo、2015

178

IOS 7の場合、ビューコントローラーでテーブルビューを割り当てている場合は、

self.edgesForExtendedLayout = UIRectEdgeNone;

あなたの問題は私のものに似ていた

更新:

iOS 9.xのSwift:

self.edgesForExtendedLayout = UIRectEdge.None

スウィフト3:

self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)

3
私の平野で働いたUITableView。この問題は、私UITableViewがaのUIViewController内部にUINavigationControllerいたためにテーブルのコンテンツが44ポイント下がったため、最初のコンテンツがの後ろになかったことが原因navBarです。私のレイアウトではそれは必要なかったので、問題を引き起こしました。結局私は自分のコードを変更して、機能するようにautomaticallyAdjustsScrollViewInsetsしました。
DBD

このプロパティは、UINavigationControllerなどのコンテナーに埋め込まれたビューコントローラーにのみ適用されます。ウィンドウのルートビューコントローラは、このプロパティに反応しません。このプロパティのデフォルト値はallです。..デフォルトは0にすべきだと思いますか?これはどこに利点がありますか。
Desh_ 2017年

5
Swift 3でよりエレガントにedgesForExtendedLayout = []
Dave Batton 2017

こんにちは@yeahdixonピンクの矢を作るのにどんなソフトウェアを使っていますか 事前の感謝
iArezki 2017年

174

から継承するcontentInsetプロパティを変更してみてください。UITableViewUIScrollView

self.tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);

それは回避策ですが、動作します


6
contentTableView.contentInset = UIEdgeInsetsMake(-20, 0, -20, 0);上部と下部に20ピクセル余分にあったので、私にとって最も効果的でした。
Brian

1
この「ブルートフォース」ソリューションは機能しますが、一番下のソリューション(具体的には、自動的にインセットを調整する)を上位にランク付けする必要があると思います。
eladleb 2014

134
self.automaticallyAdjustsScrollViewInsets = NO;

試して、あなたはそれに対処することができます!


これはiOS 7.0でtableHeaderViewを非表示にするのに最適ですが、古いバージョンではサポートされていません。
Brian


3
重要:これを必ずコンテナービューコントローラーで実行してください。UITableViewが別のコントローラーに埋め込まれるコントローラーに配置されている場合は、UITableViewを配置するコントローラー(AutoLayoutが配置されるコントローラー)ではなく、埋め込みトップコントローラーでこれを実行します。世話をする)。
James Stone

これはより良いですuncheck Adjust scroll view insets。ストーリーボードを使用してUIを構築しない場合があるためです。
JW.ZG 2016

これでうまくいきます。ナビゲーションバーとテーブルビューにビューをアタッチしました。iOS11では発生しませんが、iOS 10では発生します。ありがとうございます。
dobiho

78

アプリがiOS7以降を実行しているかどうかを検出し、この2つのメソッドをテーブルビューデリゲート(通常はUIViewControllerコード)に追加できます。

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

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

これはおそらくエレガントな解決策ではありませんが、私にとってはうまくいきます

Swiftバージョン:

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

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

1
これでうまくいきました。UITableViewは、さまざまな理由で上部にスペースを追加します。特に、OPに関連して、問題はグループ化されたスタイルのテーブルビューでのみ発生します。そして、このソリューションは問題を修正しました。
RajV 2013年

5
0.001の代わりにCGFLOAT_MINを使用すると、CGFloatの絶対値が最小になります。
eiKatte 2015

2
実際の機能は、そのパディングが唯一のグループ化された形式のテーブルビューに存在していると、あなたは、ヘッダー/フッターを指定した場合は無視されますので、これは正しい答えである
ヤクブTruhlář

これは正解としてマークする必要があります。オーバーライドするデリゲートメソッドとそれは質問に答えます。これまでにすべてのハックを読んだ場合は、少なくとも最初にこれを試してください。ツイートしてみてください:-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {// return CGFLOAT_MIN; 30.0fを返します。}
マシューファーガソン

いいね!:あなたがグループ化されたセクション間にトップとより上の少しのヘッダをしたい場合はボーナスとして、あなたは以下を使用することができますoverride func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return section == 0 ? 14 : 24 }
フリークサンダース

55

元のバグの原因を見つけ、それを紹介するサンプルプロジェクトを作成しました。iOS7のバグがあると思います。

iOS7以降、グループ化されたスタイルでUITableViewを作成するが、最初のレイアウトにデリゲートを設定していない場合、デリゲートを設定してreloadDataを呼び出すと、上部に35pxのスペースがあり、消えることはありません。

私がバグを紹介して作ったこのプロジェクトを見てください: https //github.com/esilverberg/TableViewDelayedDelegateBug

具体的には、このファイル: https //github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m

24行目がアクティブな場合、

[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];

上部に余分な35ピクセルのスペースがあります。27行目がアクティブで、24行目がコメント化されている場合、

self.tableView.delegate = self;

上部にスペースはありません。それは、デリゲートが設定され、reloadDataが呼び出された後、tableViewが結果をどこかにキャッシュし、自分自身を再描画しないようなものです。


21
私はそこにデリゲートがあるが、デリゲートの場合でも、それを追加したいtableView:heightForHeaderInSection:tableView:heightForFooterInSection:0を返しますが、あなたはまた、この問題を持っています。上記のプロトコルメソッドを実装し、0.01fを返すことで解決しました。
John Estropia 2013年

1
はい!!私は3つのいわゆるソリューションを試しましたが、これがその1つでした。素晴らしい、ありがとう:D
Henrik Erlandsson 2013年

完璧。これは意図された動作ではないと思うので、だれでもバグを報告しました。
Pushparaj 14

素晴らしい発見!これはios 9(XIBは使用していません)でも発生していますが、デリゲートをinitに設定すると、間隔が固定されました(loadViewまたはviewDIdLoadにはありません)。ありがとうございました!
John Stricker

1
ヘッダーに見積もられた高さを設定すると
Viktor

49

「スクロールビューインセットの調整」のチェックを外します

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


私の別のView Controllerにこのオプションが必要でした。新しいVCを作成したときに、変更が引き継がれたようです。これをありがとう!
デビッド

うん!動作します。ちょうどそれをContainerViewに設定して動作します!
Felipe FMMobile

46

別の簡単なコメント... XCode 6.1でもUIScrollViewsUITextViewsとの上部に縦のスペースが表示されるというバグがありUITableViewsます。

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

場合によっては、この問題を修正する唯一の方法は、ストーリーボードに移動して問題のコントロールをドラッグし、ページの最初のサブビューではなくなることです。

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

(この方向を教えてくれたOdedに感謝します...このコメントを投稿して、いくつかのスクリーンショットを追加して、症状と修正を示します。)


1
このバグ、errrr、問題は、ページの最初のサブコントロールとしてUITextViewを使用している場合にもiOS 8で発生することに注意してください...したがって、これは単なるUITableViewの問題ではありません。
Mike Gledhill、2015年

1
すべての解決策のうち、このハックだけが私のために機能しました。奇妙なバグの奇妙な修正。UITableviewでこの問題に直面しました。
Mesbah

4
100万さんありがとうございます!これは私のために働いた唯一の解決策です。
user139816

1
(私はその18か月後に驚いています、そして読者はまだこの回答に投票しています。Appleはまだこの問題を真剣に修正していませんか?!)
Mike Gledhill

1
私の命を救った!ありがとう。この簡単な「修正」を見つけるのにどれくらいの時間がかかったか知っていますか?grrh。
Mc.Stever 2016年

40

AppleによるiOS7のこの移行ガイドによると、スクロールビューのコンテンツインセットは自動的に調整されます。automaticallyAdjustsScrollViewInsetsのデフォルト値はYESに設定されています。

UITableViewを持つUIViewControllerは、このプロパティをNOに設定する必要があります。

self.automaticallyAdjustsScrollViewInsets = NO;

これでうまくいきます。

編集1:

また、試してみることができます-

self.navigationController.navigationBar.translucent = YES;

これにより、上部の余分なパッドも削除されます。


質問に正確に答えない限り、非常に良い答えです。Esilverは35pxのギャップについて話しますが、iOS7はステータスバーの高さに等しい20pxのヘッダーを追加します。
マーティン

ばかげた問題。答えてくれてありがとう。
元気

これが別の問題の答えです。
entonio 2014年

それは私のために働いてくれてありがとう、私の特定のケースでは、viewcontrollerに埋め込まれたtableviewcontrollerがあり、viewcontrollerで自動的にAdjustsScrollViewInsets = falseを設定することにより、上部のギャップが消えました
Alexey

39

グループ化されたTableViewを使用しているときに、これを使用して、viewWillAppearでの境界線の切り取りを回避します。

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);

他のすべてを試してみました。これはうまくいったものです!Thx
マイケル

36

上記の以前の回答の多くは、あまりにもハックです。Appleがこの予期しない動作を修正することを決定した場合、将来いつでも壊れるでしょう。

問題の根源:

  1. a UITableViewは、高さが0.0のヘッダーが不要です。あなたがしようとしていることが高さ0のヘッダーを持つことであるならば、あなたは解決策にジャンプすることができます。

  2. 後でヘッダーに0.0以外の高さを割り当てたとしてもUITableView、最初は高さ0.0のヘッダーが割り当てられたくありません。

解決:

次に、最も簡単で信頼性の高い修正は、テーブルビューに割り当てるときにヘッダーの高さが0にならないようにすることです。

このような何かがうまくいくでしょう:

// Replace UIView with whatever class you're using as your header below:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFLOAT_MIN)];
self.tableView.tableHeaderView = tableViewHeaderView;

このようなことが、ある時点(通常はスクロールの後)で問題を引き起こします。

// Replace UIView with whatever class you're using as your header below:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
self.tableView.tableHeaderView = tableViewHeaderView;

最後に、私はうまくいく答えを見つけました。ありがとう。さらに、それtableView.tableHeaderViewは実際には行コンテンツの上のアクセサリビューであることがわかりました。あなたの答えが出るまで、セクションヘッダーと混同されていました。
Joe Huang

1
CGFLOAT_MINCGFloat.leastNormalMagnitudeスウィフト3で置き換えられました
クレイエリス

29

ストーリーボード:

チェックを外すだけです:Adjust Scroll View InsetsView Controllerのオプションで

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

コード:

self.automaticallyAdjustsScrollViewInsets = false

2
Xcodeの7を使用して、私は属性インスペクタが表示されない>レイアウト、私はself.automaticallyAdjustsScrollViewInsets = falseを追加する必要がありますどこ
アレックス

ビューでロードしました。
CW0007007

23

これは、Swift 3を使用するiOS 10のソリューションです。

から以下のメソッドを実装することにより、上部と下部のパディングを取り除くことができますUITableViewDelegate

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

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

SOの2ページ目が助けになりました...多分、AutomaticDimensionのせいか、おそらくVFLの制約のせいか、なぜかわかりません。ありがとうございます。ozi bua ist brav!:D
Pentarex 2017年

これらはセクションのヘッダーとフッターです。質問は、テーブルヘッダー全体に関するものです。また、どちらのデリゲートメソッドにもSwift3またはiOS 10に固有のものはありません(これらは永遠に存在しています)。
Nicolas Miari 2017

14

私の場合、これが私を助けました。ios6もサポートしています。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars = NO;
    self.automaticallyAdjustsScrollViewInsets = NO;
}

これが何をするかはわかりませんが、完全に機能しました。説明していただけますか?
Matt Wolfe

@MattWolfe私は失われ、この解決策を見つけました、なぜこれが起こっているのかもわかりません。私の推測では、ステータスバー(または他のケースではツールバー/タブバー)があるため、コントローラーがtableviewにインセットが必要であると判断しているため、自動的に追加されます。新しいiOS7の「機能」のいくつかに本当に苦労しています。多分誰かがそれを理解し、これについて本当の説明がありますか?
Lukas 2013

比較的小さなアプリをiOS 7に移植して過去2日間を費やしましたが、まだ小さな問題があります。iOS7で修正すると6で壊れ、逆も同様です。
Matt Wolfe

これはOPとは別の問題です。これでも、グループ化されたテーブルビューの場合、上部に余分なスペースが追加されます。
RajV 2013年

1
これは重要な行のようです:self.automaticallyAdjustsScrollViewInsets = NO; 設定するだけで、余分なスペースがなくなりました。
Mike M

14

以下をVCのviewDidLoadに追加するだけです:

self.automaticallyAdjustsScrollViewInsets = NO;

この修正は機能し、私はマジックナンバーを使用して手動でインセットを設定することを好みます。ありがとう!
イモビライザ2016年

14

だから私はここですべての方法を試していました、そして今度はそれらのどれも助けにはなりませんでした。私のケースはiOS 9のグループ化されたテーブルビューでした。なぜ、どのようにしてこれを見つけたのか本当にわかりませんが、私にとっては、少なくとも高さのtableViewHeaderあるUIViewを設定するとうまくいきまし0.01た。CGRectZero助けにはならなかった、本当に役立ったものは何もない:

tableView.tableHeaderView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.01))

10

Swift:iOS同じ画面で「戻る」をクリックすると、スクロールビューにテーブルビューが表示されました。スクロールビューは上部のスペースが大きくなります。これを解決するには、私が使用しました。

 self.automaticallyAdjustsScrollViewInsets = false

ビューコントローラーがスクロールビューのインセットを自動的に調整するかどうかを示すブール値。デフォルト値はtrueです。これにより、ビューコントローラは、ステータスバー、ナビゲーションバー、ツールバーまたはタブバーによって消費される画面領域に応じて、スクロールビューインセットを調整できます。ビュー階層に複数のスクロールビューがある場合など、スクロールビューのインセット調整を自分で管理する場合は、falseに設定します。


10

@Aurelien Porteの回答に感謝します。これが私の解決策です

この問題の原因:-

  1. UITableViewは、高さが0.0のヘッダーが不要です。あなたがしようとしていることが高さ0のヘッダーを持つことであるならば、あなたは解決策にジャンプすることができます。
  2. 後でヘッダーに0.0以外の高さを割り当てたとしても、UITableViewは最初に高さ0.0のヘッダーを割り当てられたくありません。

ViewDidLoadで:-

self.edgesForExtendedLayout = UIRectEdge.None

self.automaticallyAdjustsScrollViewInsets = false

このような何かをする必要はありません:-

self.myTableview.contentInset = UIEdgeInsetsMake(-56, 0, 0, 0)

heightForHeaderInSectionデリゲート: -

if section == 0
    {
        return 1
    }
    else
    {
        return 40; // your other headers height value
    }

viewForHeaderInSectionデリゲート: -

if section == 0 
{  
   // Note CGFloat.min for swift
   // For Objective-c CGFLOAT_MIN 
   let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.myShaadiTableview.bounds.size.width, CGFloat.min)) 
   return headerView
}
else
{ 
   // Construct your other headers here 
}

10

これは、iOS 11およびXcode 9.1で簡単に修正できる方法です。 Storyboardを使用してです。

[テーブルビュー]> [サイズインスペクター]> [コンテンツインセット:なし]を選択します。


1
私のために働いた:)
bhupinder

すごい!ありがとう:)
Saeed Ir

1
これはautomaticallyAdjustsScrollViewInsetsiOS 11の代わりです
Nik Kov

9

それは新しいUITableViewStyleGroupedスタイルのほんの一部だと思います。これはすべてのグループ化されたテーブルビューにあり、そのスペースを制御する直接的な方法はないようです。

そのスペースは、によって表されている場合はUIView、すべてを検索することも可能であるsubviewsUITableViewその特定の表示と編集に直接それを見つけるために。ただし、そのスペースは、ヘッダーとセルが始まる前のハードコードされたオフセットであり、編集する方法がない可能性もあります。

すべてのサブビューを検索するには(テーブルにセルがないときにこのコードを実行して、出力を少し読みやすくします):

- (void)listSubviewsOfView:(UIView *)view {

    // Get the subviews of the view
    NSArray *subviews = [view subviews];

    // Return if there are no subviews
    if ([subviews count] == 0) return;

    for (UIView *subview in subviews) {

        NSLog(@"%@", subview);

        // List the subviews of subview
        [self listSubviewsOfView:subview];
    }
}

3
UITableViewCellScrollViewiOS7のUITableViews(より具体的には)が1つのことを教えてくれたなら、組み込みクラスのビュー階層をそのままにすることです。
Matthias Bauch、2013

いい視点ね。他のオプションは... iOSごとにハッキングを続けることです;)
Dan Rosenstark '18

おっと、そうです。その警告を書くつもりでしたが、忘れました。
ケビン

ケビン-私はあなたが正しいと思います、これは設計によるものです。heightForHeaderInSectionに0を返すことが、このパディングを削除する最も簡単な方法のようです。その特定のインスタンスで何らかの理由で機能しませんでしたが、他のUITableViewsでは機能します。
esilver 2013

1
それは間違いなく「仕様による」ものです。実行を一時停止して実行した場合:po [((UIApplication *)UIApplication.sharedApplication).keyWindow recursiveDescription]テーブルヘッダー、最初のセクションヘッダー、または最初のセル(使用するものに応じて)が35ピクセルの境界線を自然に残すことがわかります。
T氏

9

私の答えはより一般的な答えになるでしょうが、これにも適用できます。

もしルートビュー(ののViewController)または最初の子(サブビュー)ルートビューのはUIScrollViewの(又はUIScrollViewの自体)のサブクラスである場合、および

self.navigationController.navigationBar.translucent = YES;

フレームワークは、事前に計算されたcontentInsetを自動的に設定します。


これを回避するには、あなたがすることができます

self.automaticallyAdjustsScrollViewInsets = NO;

しかし、私の場合、他の開発者が使用できるUIViewコンポーネントを持つSDKを実装していたため、これを行うことができませんでした。そのUIViewコンポーネントには、UIWebView(UIScrollViewが最初のサブビューとして含まれています)が含まれています。そのコンポーネントがUIViewControllerのビュー階層の最初の子として追加されると、自動インセットがシステムによって適用されます。

UIWebViewを追加する前に、フレーム(0,0,0,0)のダミービューを追加して、これを修正しました。

この場合、システムは最初のサブビューとしてUIScrollViewのサブクラスを見つけず、インセットを適用しませんでした


命の恩人!ありがとうself.automaticallyAdjustsScrollViewInsets = false
エタネフ2016年

8

このコードは私にとってはうまくobjective-Cいきました、私にとって最良の答えは上から書かれたので、それをSwiftに変換しました。

Swift 4.0以降の場合

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: 0.01))

これを書き込むだけでviewDidLoad()、魅力のように機能します。


1
どうもありがとうございました。
アンジェロPolotto

1
ようこそハッピーコーディング
Vipul Kumar

7

arielyzと同じ修正を行いました。親ビューの最初のサブビューではないようにUITableViewを移動すると、それはなくなりました。私のスペースは35ではなく20ピクセルでした。

縦向きのxibでは再現できませんでした。横向きのxibだけです。簡単なデモアプリで再現できる場合は、後でレーダーバグを報告します。


同じ問題に出くわしましたが、contentInsetを変更しても解決できませんでしたが、かなりハックなものの、この方法は機能しました。価値があるのは、ビジュアルデバッグツールを使用して、UITableViewが適切な高さであるのに、その中のUITableViewWrapperがそうではないことです。
Mic Fok 2014年

完璧です。これにより、XCode 6.1のバグが修正されました。このStackOverflowページの他の提案では、違いはありませんでした。UIView内にUITableViewがあり、最初のサブビューでした。ドラッグして2番目のサブビューになると、完全に修正されました。(誰かが私を必要とするなら、私はパブにいるでしょう。)
マイクGledhill '10 / 12/14

ありがとうございました!これは、コンテナー内にテーブルビューコントローラーがある場合にも機能します。親のビューの最初ではないようにコンテナーを移動すると、テーブルビューの上部にあるギャップが削除されます。
strangeluck

7

UIEdgeInsets -35 0 0 0を作成するのは面倒です。私の場合、tableView:heightForHeaderInSection:メソッドを実装しましたが、0を返す可能性があります。

0を0.1fに変更すると、問題はなくなりました。


1
できれば、これを2回以上賛成します。何でも> 0作品として奇妙な自動レイアウトグリッチや何かを...でなければならない、私は両方が正の値をsmallesように1.0 +イプシロン表すとして見て、代わりに0.1使用FLT_EPSILONまたはDBL_EPSILONの示唆= 1.0!
アンリNormak

7

私のために働いた唯一のものは:

スウィフト

tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

Objective-C

self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 0;

また、最初のセクションのためのスペースがまだありました。これは、tableHeaderViewプロパティを誤って使用していたためです。以下を追加することによっても修正されました:

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 0.01))

Swift 4.2で動作します。ありがとう
Sylar

このページのすべてを試しましたが、iOS13はヘッダービュー付きのテーブルビューをグループ化しました。self.tableView.tableHeaderView = UIView(frame:CGRect(x:0、y:0、width:tableView.frame.size.width、height:0.01))。問題を修正しました。

7

Swift 4コード:セクションヘッダーのないテーブルビューの場合、次のコードを追加できます。

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

ヘッダーの間隔は0になります。

特定の高さのヘッダーが必要な場合は、その値を渡します。

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return header_height
}

そしてviewForHeaderinSectionデリゲートからのビュー。


これは質問の答えにはなりません。問題は、余分なスペースがどこから来るのかではなく、それを取り除く方法ではありませんでした。
スティーブンニューウェル

奇妙なことに、uがheightForHeaderInsectionで0を返す場合でも、uはこの余分なスペースを取得します。CGFloat.leastNormalMagnitude(最小の正数)で完璧に動作します
ShadeToD

7

具体的には、上部からtableviewHeaderスペースを削除するために、次の変更を行いました。

YouStoryboard.storyboard> YouViewController> TableViewを選択>サイズインスペクター>コンテンツインセット-絶対に設定しない。

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


この回答と比較して、スクリーンショット以外の追加情報は何ですか?
Artjom B.

それは私が推測するのと同じです、私が解決策を探していたときに私はその答えを見つけませんでした。次に、私の答えを削除する必要があります。
user832

Content insets =この問題を実際に解決しない理由を説明することで、答えを少し広げることができない場合は、このオプションはどのように機能しますか?
Artjom B.

content insetsがneverに設定されている場合、tableViewはtextFieldの編集時に上にスクロールしません。
mojtaba al moussawi

6

これを使用して、私はこのヘルプを考えます...

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
 {
    return 0.005f;// set this according to that you want...
 }

1
鮮やかさ!iOS 9.2の魅力のように動作します。この回答は完璧です。ある場合には最初のヘッダーを抑制し、他の場合にはそれを表示する必要があるためです。CGFloat.minを使用した別の回答も見ましたが、これも機能します。私のViewControllerは現在、44.0または本質的に0のような実数のいずれかを供給することができるように
デビッド・H

6
override func viewWillAppear(animated: Bool) {
        self.edgesForExtendedLayout = UIRectEdge.None

 //  OR

self.sampleTableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

   //OR

 self.automaticallyAdjustsScrollViewInsets = false
        }

automaticallyAdjustsScrollViewInsets = false私からの作業!THX!
ダニエルクタ2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.