1

ここにはおそらく奇妙な VC 構造があり、それを少し奇妙に作っただけで壊れてしまいました

UIViewController (contains->) UIContainerView (embeds ->) UIScrollView (contains ->) UIView

スクロールビューを特定のサイズ制限に準拠させる方法がわからなかったため、最終的な UIView があります。そのため、「コンテンツビュー」を追加しました。

問題は、「コンテンツ ビュー」のデータが読み込まれないことです。

contentview のログは次のとおりです。

<UIView: 0x81cd510; frame = (-306 0; 612 792); autoresize = TM+BM; layer = <CALayer: 0x81c2000>>

Scrollview のログは次のとおりです。

<UIScrollView: 0x81e5e90; frame = (0 0; 0 0); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x81e67b0>; layer = <CALayer: 0x81e6060>; contentOffset: {0, 0}>

ロードされていないようです...何が得られますか?ロードするにはどうすればよいですか?

明確にするために編集します。

  • これらのビューはすべて IB を通じて作成されました
  • AutoLayouts を使用しない (興味深い話ですが)
  • NSLog メソッドは、ビュー階層チェーンの最上位にあるビュー コントローラーの ViewDidAppear で呼び出されます。(もしかしてこれが本題?)

編集: プロジェクトを github にアップロードして、人々が見られるようにしました https://github.com/Pinwheeler/ChiroMatic.git

4

1 に答える 1

2

私はあなたのプロジェクトにかなりの時間を費やしましたが、イライラすることに、問題の原因を推測することができませんでした. PrintViewControllerしかし、あなたとPrintContentViewControllerシーンを再作成することで問題を解決できることがわかりました(そして、問題を解決するには両方を再作成する必要がありました)。あなたのプロジェクトのフォークを作成し、2 つのシーンを修正しました。ソース コードと git リポジトリ コミット コメントの両方で変更に注釈を付けようとしたので、私の変更内容に従ってください。私のフォークは次の場所で入手できます。

(そのレポを削除してほしいときはお知らせください。github に無期限にコピーを残してほしくないので、いつでも喜んで削除します。)

いくつかの観察:

  1. あなたは自動レイアウトを使用していないと言いますが、使用しています。(ストーリーボードの最初のDocument Inspectorタブに移動すると、「Use Autolayout」がチェックされていることがわかります。) それを使用したい場合は問題ありません (Xcode のデフォルトになっています) が、iOS バージョンとの下位互換性が失われることに注意してください。使用する場合はiOS 6より前。Autolayout は強力ですが、使い始めは難しい場合があります。君に電話だ。

  2. あなたのPrintContentViewControllerでは、私の最も重要な変更は、標準のビュー コントローラー シーン構成 (トップ レベルのビューがUIView) を使用することでありUIScrollView、そのサブビューを作成しました。UIViewそうは言っても、のサブビューは必要ないと思いますUIScrollView(中間の がある場合、スクロールビュー機能が失われるため問題がありますUIView)ので、それを削除し、すべてのラベルなどのサブビューを作成しましたビュー自体をスクロールします。

  3. あらゆる場所でコンテナー ビューを使用していますが、不要なレベルの複雑さを追加しているように思えます。(ちなみに、これらのコンテナー ビューを使用しなければ、元の質問で問題が発生することはありませんでした。)

    カスタム コンテナーは、コンテナー ビュー コントローラーに関連付けられたロジックをその子ビュー コントローラーから抽象化する場合に非常に便利です。しかし、あなたはここでそれをしていません。IBOutletさらに悪いことに、子コントローラーの参照を取得し、コンテナー コントローラーのプロパティを更新するために、あらゆる種類の回転を経験しています。これらのコンテナー ビューの使用を再考し、プロジェクトから完全に削除することを心からお勧めします。

    どうしてもコンテナー ビューが必要な場合は、それらを使用してください (私はコンテナー ビューが大好きで、常に使用しています)。ただし、ここではその必要はないと思います。

    また、埋め込みセグエの使用は iOS 6 の機能のみであるため、iOS 5 の下位互換性が必要な場合は問題になる可能性があります。

要するに、新しいプロジェクトを作成してストーリーボードをミラーリングするときに、問題を再現できませんでした. また、古いシーンPrintViewControllerを編集しても問題を解決することはできませんでした。PrintContainerViewControllerこれらのシーンを再現したときにのみ修正できました。

私はあなたの古いシーンをそこに残しました (ストーリーボードが混乱しないように、セグエの前に「古い」を付けます)。たぶん、私を回避しているストーリーボードにいくつかのバグがありました. 見えない設定があるのか​​もしれません。私が知っているのは、あなたのコントロールを 2 つの新しいシーンにコピーして再作成したところ、うまくいったということだけです。

個人的には、ゴルディアン ノットをカットして、コンテナー ビューを完全に削除することをお勧めします。あなたのコードはよりきれいになり、この種の問題は醜い頭をもたげる可能性が低くなります。

これは満足のいく結論ではありませんが (問題の原因がわからないため)、少なくとも修正されたようです。幸運を。

于 2013-04-14T00:44:58.260 に答える