8

スタックオーバーフローへの初めての投稿。

私は多くのGoogle検索を精査するのに何時間も費やし、この時点で、UIViewおよびUIViewControllerクラスのリファレンスドキュメントを実際に記憶しています。私が何をしても、私のアプリは、向きの変更(またはその他のフレームサイズの変更)でビューのサイズを変更する努力を無視しています。

関係するペン先やxibはありません。すべてのビューとビューコントローラーをプログラムで構築しています。これら(ビューコントローラー)はすべて、作成した3つのカスタムUIViewControllerサブクラスの1つのサブクラスです。これらのスーパークラスのloadViewには、次の行があります。メソッド...

[self setView:[[[UIView alloc] initWithFrame:[self viewFrame]] autorelease]];
[[self view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[[self view] setAutoresizesSubviews:TRUE];

すべての適切なセッターメソッド(つまり、subViewを追加する場合)で、autoresizingMaskを適用する手順を繰り返しています。私が何をしても、結果は常に同じようです。[ビルド]をクリックし、[デバッグ]をクリックして、アプリが起動するのを待ち、デバイスを回転させて、プレストします。ビューは回転しますが、サイズはまったく変更されません。

ここで何が欠けていますか?私が見ていなかったことはおそらく明らかなことです。よろしくお願いします。

4

1 に答える 1

34

まあ、確かに、それは私自身のせいでした。

レッスン1: 壊れたコードを修正するために一晩中起きていても、あなたは自分自身に何の恩恵も与えていません。少し休む!もっと水を飲もう!脳が就寝時刻を過ぎても複雑なアルゴリズム戦略と論理を実行するように強制しようとすると、事態はさらに悪化するでしょう。

自動サイズ変更プロパティがまったく設定されていない、ビュー階層の最下部にある不正なUIViewがあったことがわかりました。私はすべてを調べたと思ったが、1つを逃したことがわかった。(ほんの1つの小さなビューと1日中のショット!)

後で同様の欲求不満を持ってやって来る人なら誰でも言うことができますが、それAutoresizingは実際に文書化されているように機能します。「何かが呼び出されていない」と思う場合は、おそらく間違った場所を探しています。また、UIViewAutoresizingMask列挙型定数は、InterfaceBuilderの場合とまったく同じようには使用されません。IBでは、マージンを「ロック」しますが、プログラムで設定する場合、デフォルトではロックされたマージンが想定され、「フレキシブル」に設定して「ロック解除」します。したがって、たとえば、FlexibleWidthビットとFlexibleHeightビットのみを設定することは、IBですべての自動サイズ変更オプションを有効にすることと同じです。マージンマスクのいずれかを投入することによって(すなわちUIViewAutoresizingFlexibleLeftMargin)IBで対応するマージン自動サイズ変更オプションを「選択解除」しています。(他の多くの投稿が浮かんでいるのを見たことがありますが、これは一部の人々にとって大きな混乱のポイントであるように思われました。)

ただし、調査中に、UIViewのサイズが自動的に変更されるかどうかに関係なく、イベント、メッセージ、通知などのイベント、メッセージ、通知などがないように見えることに気付きました。サブビューのサイズ変更には必要ありませんが、フレームサイズが変更された場合に、scrollViewまたはtableViewをスクロールさせたい状況でいつ発生するかを知っておくと便利です。キーボードがポップアップしたときにこれを簡単に行うことができることを私は知っています。なぜなら、その周りに通知システムとTextField delegateメソッドがあるからです。だから多分別の投稿のトピック...

とにかく、StackOverflowに参加してくださった皆さん、ありがとうございました!

于 2010-09-19T10:47:37.710 に答える