115

iOS 7 でプレーンなジェーン UITableView を UIViewController にドラッグしました。

最初のセルが開始する前に、スペースの垂直方向のオフセットがあります。どうすればそれを取り除くことができますか?最初の行を、UITableView が実際に始まる場所の上端にもっと近づけたいと思います。私は大きなオフセットを求めませんでしたか?

ここに画像の説明を入力

何か案は?

4

21 に答える 21

81

デフォルトでは、Table View Controller はコンテンツをナビゲーション バーの下にパディングするので、その下のコンテンツをスクロールして、ぼやけた状態でナビゲーション バー/ツールバーの下に表示できます。

ナビゲーション バーの下から移動するために 44 (おそらく 64) ピクセルに配置しているように見えますが、これは既に補正されているため、大きなギャップが生じます。

IB のストーリーボード/xib に移動し、ナビゲーション バーのものの下にあるショー コンテンツのチェックを外します。

于 2013-08-22T19:02:36.587 に答える
68

iOS7 移行ガイドより:

スクロール ビューのコンテンツ インセットを自動的に調整したくない場合は、automaticAdjustsScrollViewInsets を NO に設定します。(automaticAdjustsScrollViewInsets のデフォルト値は YES です。)

   self.automaticallyAdjustsScrollViewInsets = NO;
于 2013-11-12T08:40:27.160 に答える
34

viewControllerを閉じた後、tableViewのcontentOffsetが(0、-64)に変更されました。

私の解決策は少し奇妙でした。他のすべての回答を試しましたが、成功しませんでした。問題を解決した唯一のことは、.xib のコントロール ツリーで tableView の位置を切り替えることでした。

次のような親ビューの最初のコントロールでした。

前

ImageViewの直後にtableViewを移動したところ、うまくいきました:

後

テーブルビューを最初の位置に配置すると問題が発生し、テーブルビューを別の位置に移動すると問題が解決したようです。

PD 私は autoLayout もストーリーボードも使用していません

これが誰かを助けることができることを願っています!

于 2014-04-11T18:09:41.110 に答える
30

それは私の同様の問題を解決します:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}
于 2013-10-03T17:10:33.667 に答える
8

iOS 9 では、このページの他の回答はどれもうまくいきませんでした (つまり、ストーリーボードのボックスのチェックを外し、に設定automaticallyAdjustsScrollViewInsetsしますNO)。

私が本当に不満を持っている私の回避策はこれでした:

- (void)viewDidAppear:(BOOL)animated {
    self.tableView.contentOffset = CGPointMake(0.0, 0.0);
    self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
}

viewWillAppearまたはの同じ行viewDidLoadは効果がありませんでした。

于 2016-05-27T13:14:51.847 に答える
5

が Navigation Controller 内に埋め込まれている64場合、Table View の上部に高さのギャップが生じることがあります。UIViewController

ここに画像の説明を入力

以前は、白紙の状態にした後に制約が正しくなることを期待して、すべてを再作成するだけでした。

TIL: に垂直方向の制約を加えたくない場合はTop Layout GuideOptionキーを押したままにして にアクセスできますContainer Margin

ここに画像の説明を入力

次に、Top Space to Superview定数が に設定されていることを確認し0ます。これは少なくとも私にとってはうまくいきました。

ここに画像の説明を入力

于 2016-03-19T04:21:53.157 に答える
2

UITableView の前に空の UIView を追加すると (または、ScrollView や TextView などのスクロール可能なビューがあれば)、うまくいく可能性があります。

于 2016-01-14T02:24:17.423 に答える
1

ときどき、このひどい状況に戻ることがありますが、それはまだまったく知られていません。では、今後の記念に…

最近、私はこの回避策で修正しています。

  1. UITableView の上部に、高さゼロのサブビューを追加します。Autolayout の有無にかかわらず動作します。
  2. 自信があれば:-)この偽のビューを削除し、上部の制約を修正すると、魔法のように機能します。

理由は聞かないでください。UIKit の深いところにあるバグだと思います。

于 2015-12-20T23:06:25.280 に答える
1

Xamarin iOS では、フォアグラウンド モーダル ダイアログが閉じられた直後に、バックグラウンド化された UITableViewController でこの問題が発生しました。フォアグラウンドに移動する過程で、UITableViewController にはインセットが設定されていました (iOS のどこかに):

このクラスはそれを解決しました

public class UITableViewControllerWithBugFix : UITableViewController {
    public UITableViewControllerWithBugFix(UITableViewStyle withStyle) : base(withStyle) {
    }

    public override void ViewWillLayoutSubviews() {
        if (TableView.ContentInset.Top != 0.0f)
            TableView.ContentInset = UIEdgeInsets.Zero;
        if (TableView.ScrollIndicatorInsets.Top != 0.0f)
            TableView.ScrollIndicatorInsets = UIEdgeInsets.Zero;

        base.ViewWillLayoutSubviews();
    }
}
于 2014-12-18T08:11:55.537 に答える
1

コンテナー ビューに UITableViewController を埋め込んでいました。不要な 64 ポイントの垂直方向のスペースを取り除くには、Interface Builder で「Adjust Scroll View Insets」のチェックを外し、以下のように UITableViewController の viewWillAppear で UITableView の contentInset を設定する必要がありました。

垂直スペースのサイズは、ナビゲーション バーのフレームの高さと y オフセットに一致するように見えます。問題は iOS 7 でのみ発生しました。

- (void)viewWillAppear:(BOOL)animated;
{
    [super viewWillAppear:animated];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        const CGRect navBarFrame = self.navigationController.navigationBar.frame;
        const CGFloat blankVerticalSpace = navBarFrame.origin.y + navBarFrame.size.height;
        self.tableView.contentInset = UIEdgeInsetsMake(-blankVerticalSpace, 0, 0, 0);
    }
}
于 2014-06-23T07:38:04.623 に答える
0

ストーリーボードに移動すると、テーブルを選択してオフセットを変更できます。属性インスペクタのテーブル ビュー セクションで、左側のセパレータ インセットを 0 に変更します。

于 2013-11-21T15:50:19.537 に答える
0

本当の解決策は、テーブルビューの上下の制約をtopMarginとbottomMarginに等しく設定することだと思います。上部レイアウト ガイドと下部レイアウト ガイドではありません。これにより、automaticAdjustsScrollViewInsets を true に保つことができます。

于 2016-06-06T05:23:35.557 に答える