128

現在、iOS 7 でアプリを移行していますが、新しいナビゲーション コントローラー/バー管理で何時間も立ち往生しています。

以前、ナビゲーション コントローラーがあったときは、次のようなスニペットがありました。

UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];

インターフェイス ビルダーでは、ビューに既存のナビゲーション バーを設定する選択肢があり、すべてが実際のビューのコンテンツと一致します。

わかりましたので、インターフェイスビルダーで適切に設計する方法の手がかりがありません。navcontroller を初期化するためのスニペットがまだあります。ただし、MainViewController のインターフェイス ビルダーで、ステータス バーを半透明または不透明なナビゲーション バーに設定すると、上部に 44px のオフセットがあります (以下を参照)。


Interface Builder_________________________とその結果


ここで、ステータスバーをなしに設定すると、上部にオフセットはありませんが、ナビゲーションバーのためにシミュレーターのビューが小さいため、インターフェースビルダーのビューの下部が切り取られます。

Interface Builder_________________________とその結果

ここで本当に何かが欠けていると思いますが、iOS7 Transitions Guide でそれに関するトピックやアップル情報が見つかりません。

ご協力いただきありがとうございます


編集

写真でわかるように、ビューの最初の子は両方のラベルを含む UIScrollView であり、スクロールビューがない場合は問題は発生しません。UITableView の場合にも表示されます。ラベルが UIScrollView の外側にある場合、そのラベルへのオフセットはありません。

4

8 に答える 8

92

@Justafingerの答えは、私にとっても魅力的でした。

この設定は、インターフェイス ビルダーからも簡単に調整できることを付け加えたいと思います。

  1. ビューコントローラーを選択してください
  2. [属性インスペクター] タブをクリックします。
  3. 「スクロール ビューのインセットを調整する」のチェックを外します
  4. 楽しみ!

ここに画像の説明を入力

于 2014-10-25T21:05:49.247 に答える
11

私はこの同じ問題に遭遇していましたが、ViewController のインターフェイス ビルダーで、これを引き起こしていると思われるかなり奇妙なプロパティを見つけました。チェックボックスの「エッジを拡張」セットがあります。「アンダートップバー」チェックを外すと、すべてが適切にレイアウトされ始めました。

于 2014-04-29T19:27:41.573 に答える
2

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

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

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

前

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

後

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

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

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

于 2014-04-11T20:22:25.270 に答える
2

automaticAdjustsScrollViewInsets を YES (デフォルト設定) に設定すると、ios6 と ios7 の間でスクロールビューの位置が一致しないため、それらを一貫させるには、この設定を無効にする必要があります。ただし、automaticAdjustsScrollViewInsets に遭遇すると ios6 がクラッシュするため、ios7 で条件付きの automaticallyAdjustsScrollViewInsets をプログラムで変更するか、ストーリーボード/NIB を使用してオプションをオフにする必要があります。

于 2014-02-15T07:32:20.080 に答える
1

私もこの問題に直面しています。

UIScrollViewコンテンツのサイズは、他のサイズとして OS によって計算され、起源は制約システムによって提供されます。そのため、OS には疑問があります。

修正方法 - 次のコンテンツ サイズを明示的に定義する必要がありますUIScrollView

  1. スクロール可能なコンテンツを に埋め込みますUIView(名前を に変更しますContentView)
  2. 制約を追加します。

ContentView.Weight = View.WeightContentView.Height = View.Height

ここに画像の説明を入力

于 2015-09-25T09:59:48.223 に答える
0

解決策をありがとう!問題を解決するために何時間も苦労しました。ナビゲーションバーが関係していないときはすべて問題ありませんでしたが、ViewController を NavigationController に埋め込んだ瞬間に大混乱になりました。

Adjust Scroll View InsetsUnder Top Barsのチェックを外すことで解決しました。これらはどちらも、ViewController の属性インスペクターにあります。どうもありがとう!

于 2016-12-10T07:11:23.143 に答える
0

回避策は、ストーリーボード ファイルを「iOS 6.1 以前」として表示することです (ストーリーボード ファイル -> ファイル インスペクター -> インターフェイス ビルダー ドキュメント -> 表示形式を選択します。このモードでサブビューを配置すると、オフセットが表示されます。

于 2013-09-23T20:27:43.487 に答える