1. ホーム
  2. uinavigationcontroller

[解決済み] IOS7 : UINavigationControllerにおけるUIScrollViewのオフセットについて

2022-07-11 13:08:42

質問

現在ios7でアプリを移行中ですが、新しいnavigationcontroller/barの管理で何時間も立ち往生しています。

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

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

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

今、私はインターフェイスビルダーで適切にデザインする方法を全く知らないのです。 私はまだ私のnavcontrollerを初期化するためのスニペットを持っています。しかし、MainViewControllerのインターフェースビルダーで、ステータスバーを半透明または不透明なナビゲーションバーに設定すると、上部に44pxのオフセットがあります(下図参照)。



インターフェースビルダー______________________そして結果



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

インターフェイスビルダーの結果

iOS7 の Transitions Guide には、この件に関するトピックやアップルの情報は見当たりません。

助けてくれてありがとうございます。



EDIT

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

どのように解決するのですか?

私は解決策を見つけたので、私は私のコントローラにプロパティを設定しました。

self.automaticallyAdjustsScrollViewInsets = false

このプロパティの本当の利点がよくわからないのですが、(あるいはなぜデフォルト値がtrueなのか)。

私が見つけた唯一のドキュメントはそこにありました。

更新

iOS 11では automaticallyAdjustsScrollViewInsets は非推奨

を使うようになりました。

self.tableView.contentInsetAdjustmentBehavior = .never

また、ぜひ この質問 とその回答を確認し、これらのプロパティをよりよく理解することをお勧めします。