1

私はiPhone用に開発することを学んでいます(プログラム的には、IBは好きではありません)。私は物事のフレームにIBのみを使用しているので、IBで設計しますが、各コントロールのフレームをチェックするためにのみ使用します。私が非常に混乱しているのは、UIViewのフレームです。まず、loadViewを実装しない場合ビューコントローラでは、空のUIViewが自動的に作成され(黒であることに気づきました)、それをself.viewに割り当てます。フレームはどうですか?フレームがどうあるべきかを自動的に判断しますか?つまり、ステータスバーがあるかどうか、タブバー、ツールバーがあるかどうか、向きによって異なる必要があります。タブバーアプリでは、uiviewのフレームを何に設定しても、問題なく表示されます。また、UIViewのフレームがIBで混乱しているようです。ウィンドウ全体(ステータスバーを除く)を占めるU​​IViewのy値が0であるのと同様に、ステータスバーが上位20ピクセルを占めるため、20である必要があります。また、IBでは、タブバーコントローラーのビューのay値は411ですが、ステータスバーのすぐ下から始まります。そして、私がフレームをNSLogするときはいつでも(4つの数字、view.frame.origin.x、view.frame...など。)x、y、幅、高さは常に0です。それを理解している人が私に説明してもらえますか?ありがとう!!

わかりました、これは奇妙です...これ:

CGRect test = CGRectMake(0, 20, 320, 460);
NSLog(@"%d %d %d %d", test.origin.x, test.origin.y, CGRectGetWidth(test), CGRectGetHeight(test));

出力を与えます:

0 0 0 1077149696

??? それは何ですか?

4

3 に答える 3

5

最初に注意する必要があるのは、CGRectのoriginおよびsizeメンバーはfloatを使用するため、NSLogステートメントでは%dではなく%fを使用する必要があるということです。たとえば、

NSLog(@"%f %f %f %f", test.origin.x, test.origin.y, test.size.width, test.size.height);
于 2009-08-13T02:05:42.153 に答える
0

デスクトップではスケーリングを行うときに正確な計算が必要であり、比例サイズ設定をサポートする必要があるため、ピクセルサイズは浮動小数点数です。整数に固執し、ウィンドウサイズがたとえば1.2倍に拡大された場合、整数の四捨五入は物事をラインから外します。自動サイズ設定のサブビューを作成でき、フロートでサイズと位置をより細かく制御できるため、iPhoneでも同じことが維持されます。

ビューの位置については、IBに移動してビューを選択し、[ビュー属性]インスペクターをチェックすると、オプションの1つが[シミュレートされたインターフェイス要素]を表示することであることがわかります。デフォルトでは、ステータスバーが有効(灰色)になっており、インターフェイスでの高さを考慮しています。インスペクターの[サイズ]タブを確認すると、ビューの高さは実際には460に設定されています(20ピクセルのステータスバーを使用できます)。

トップバーまたはボトムバーを含めることを選択でき、コンテンツの高さを調整することでそれらを「シミュレート」します。これは単なるポジショニングシミュレーションであるため、コントロールをレイアウトできます。実行時に、適切なクロムを備えた適切なビューコントローラにビューをロードすることを前提としているため、すべてが正しく表示されます。

相対的な位置付けのために多くのIB番号があります。ビューをnavcontrollerまたはtabviewに追加すると、このビューはそれらの親ビューの子になり、デフォルトではサブビューのサイズが自動変更されます。したがって、IBでそのトップバーを「シミュレート」した場合、コントロールはすべて適切に並べられ、適切な場所に流れ、期待どおりの結果が得られるはずです(もちろん、どの親コントロールがサブビューで終わるかによって異なります)。子どもの頃)。

ところで、コントロールを配線してIBOutletsに接続するために、IBを使用しないことで、多くの利便性を逃しています。それは本当に多くの手作業と余分なコードを取り除くのに役立ちます。それはスーパーマンが彼のX線ビジョンの使用を拒否し、代わりに壁を突き破ることを決定したようなものです:-)

于 2009-08-18T18:50:50.063 に答える
0

回答:IBは常に正しい原点/位置座標を表示するとは限りません。また、UITabBarControllerなどの一部の機能では、設定内容に関係なく、ビューのサイズを変更して希望どおりに表示します。

于 2009-08-21T02:50:03.103 に答える