16

セットアップ:

テキストフィールドのセットを表示する Xcode 5 のビューに取り組んでいます。キーボードが表示されたときにスクロールを処理するために、スクロール ビューを使用して TextField を配置しています。自動レイアウトを使用しています。

問題:

実行時にスクロール ビューの上部に余分なスペースが追加されるという問題に取り組んでいます。スクロールビューにインセットが適用されているようですが、インセットがゼロであることをログで確認しました。

私のviewDidLoad()メソッドの実装では、値を確認するためにこれを行っています...

UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
self.scrollView.contentSize = self.scrollView.bounds.size;
self.scrollView.contentOffset = CGPointMake(0.0, 0.0);

NSLog(@"Content Size: %f x %f", self.scrollView.contentSize.height, self.scrollView.contentSize.width);
NSLog(@"Bounds Size: %f x %f", self.scrollView.bounds.size.height, self.scrollView.bounds.size.width);
NSLog(@"Frame Size: %f x %f", self.scrollView.frame.size.height, self.scrollView.frame.size.width);
NSLog(@"Inset Size top: %f bottom: %f", self.scrollView.contentInset.top, self.scrollView.contentInset.bottom);
NSLog(@"Scroll Inset Size top: %f bottom: %f", self.scrollView.contentInset.top, self.scrollView.contentInset.bottom);

出力:

2013-10-08 11:38:42.953 test[6440:a0b] Content Size: 455.000000 x 320.000000
2013-10-08 11:38:42.954 test[6440:a0b] Bounds Size: 455.000000 x 320.000000
2013-10-08 11:38:42.955 test[6440:a0b] Frame Size: 455.000000 x 320.000000
2013-10-08 11:38:42.955 test[6440:a0b] Inset Size top: 0.000000 bottom: 0.000000
2013-10-08 11:38:42.956 test[6440:a0b] Scroll Inset Size top: 0.000000 bottom: 0.000000

最初のテキスト フィールドの上に追加されたスペース (インセット) は、標準のナビゲーション ヘッダーとほぼ同じように見えますが、これは偶然かもしれません。

私のスクロール ビューは、ナビゲーション ステータス バーと下部のタブ バーの間に収まるように、高さ455、y 値64に設定されています。

潜在的な問題のレイアウト通知はありません。スクロール ビューの上下のスペース制約は、0ポイントになるように配置されます (ステータス バーとタブ バーから推測します。

アプリを実行してスクロール ビューに余分なスペースが表示されている場合、スクロール バーは予想されるスペースのみをカバーしています (スクロール可能な領域の一部としてこの余分なスペースは含まれていません)。

最後に 1 つ注意してください。キーボード通知ロジックを実行するとき。(ここではアップルから取得...)問題は自然に解決し、スペースがなくなります。ストーリーボードで構成されているものの初期化の問題のように見えるのはどれですか?

ありがとう!

4

3 に答える 3

61

iOS7 の UIViewControllers には という設定がありますautomaticallyAdjustsScrollViewInsets。これがの場合YES、スクロール ビューのインセットは、ステータス バー、ナビゲーション バー、およびツールバーまたはタブ バーの高さに応じて自動的に調整されます。

この設定は、Interface Builder でも設定できます。属性インスペクターの「スクロールビューインセットの調整」と呼ばれています。

スクリーンショット

于 2013-10-08T17:57:55.123 に答える
0

Greg が示すように、IB のビュー コントローラーで「スクロール ビュー インセットの調整」を無効にすることに加えて、この問題を解決する別の方法は、スクロール ビューと上部レイアウトの間にある「上部配置」制約を編集することであることがわかりました。ガイド。後者を「Top Layout Guide.Bottom」から「Top Layout Guide.Top」に変更すると、実行時に問題なく表示されますが、ストーリーボード (Xcode 6.4) に余分なスペースが表示されます。

于 2015-09-09T04:30:07.733 に答える