2009-05-12 4 views
4

固定値のnebで私のビューの高さを設定するときにトラブルに遭遇するのではないかと思います。iPhoneアプリケーションのレイアウトを柔軟に設計することは重要ですか?

例:ステータスバーの高さはわかっています。それは20単位です。したがって、すばらしいインターフェイスを示すビューを作成するとき、ユーザーがアプリケーションを使用しているときに電話をかけ、ステータスバーの高さが上がるとどうなりますか?あるいは、Appleがある日、ステータスバーまたはTab Barの高さを将来変更するとどうなるでしょうか?

すべてのインターフェイス要素が内部にあるコンテナビューには常に自動サイズ調整機能が使用されますか?あなたのパターンは何ですか?

答えて

7

あなたのプログラムにステータスバー、ツールバーなどの高さをハードコーディングすることはできません。これらの値がどのように動的で、将来変化する可能性があるかの良い例をいくつか紹介します。あなたがサポートしているかもしれないし、サポートしていないかもしれないもう一つの一般的なシナリオは、iPhoneを横向きに回転させるユーザーの能力です。

常にを試してください。コンテナのサブビューのレイアウトを柔軟に保つことができます。自動サイズ設定機能を使用するのは良い方法です。あなたの質問は良いものです。自分のレイアウト戦略を見直すことができると思います!

+0

ありがとう!ステータスバーやタブバーが大きくなったり小さくなったりすると、それらのイベントをテストする方法を知りたいと思います。 – Thanks

+2

ここに私が使っている簡単な方法があります。シミュレータでアプリケーションを実行してから、[ハードウェア]> [通話中ステータスバーの切り替え]に移動します。ステータスバーが拡大します。同じメニューオプションを選択すると、ステータスバーが元のサイズに戻ります。 –

+0

同じメニューを使用して、デバイスを左右に回転させて、横向きのときにレイアウトをチェックすることもできます。 –

4

私は常に設計に集中してコンピュータに計算させるために、自動的にサイズを変更する柔軟なレイアウトを使用します。

[編集]私の理由は、何かが変わることになり、私はこの場合に再び数学をやりたくないということです。変更できるもの:

  • ユーザーはデバイスの次の世代が大きな画面を取得し、彼らはピクセル-狭いスペース
  • アンに単語を合わせて持っているとき
  • 翻訳者はそれを嫌う大きなフォント
  • を選択するかもしれませんアドオン私は事前に定義されたアイコンを使用している場合はOSの変化は数ピクセル
  • によって画面サイズを変更する場合があります
  • 画面上にいくつかのピクセルを取るかもしれないが、その大きさは
  • を変更する場合があります
  • 最終的に、柔軟なアプリケーションでは、ユーザーは自分が見たいものを選択できます。私は彼女がUIをレイアウトする必要はありません。

レイアウトを静的にすると、やり直す必要があります。そしてまた。あなたがソフトウェア開発の唯一の定数が変わることを学ぶまで、

+0

何をしますかスペースを正確に使用している場合はどうしますか? IEの画面が完全にコントロールの完全な場合は、IE? – Thanks

+0

何かが起こりそうです。それは常にそうです。 –

0

Appleの提供するファイル "Constants.h"には、これらのサイズのほとんどが含まれていませんか? (私はそれがUICatalog SDKの例に含まれていることに気がつきました)。

私は、アップルが別のデバイスを起動する可能性が高いと思います。したがって、これらは[UIScreen frame/bounds]と組み合わせて使用​​する必要があります。

// these are the various screen placement constants used across all the UIViewControllers 

// padding for margins 
#define kLeftMargin    20.0 
#define kTopMargin    20.0 
#define kRightMargin   20.0 
#define kBottomMargin   20.0 
#define kTweenMargin   10.0 

// control dimensions 
#define kStdButtonWidth  106.0 
#define kStdButtonHeight  40.0 
#define kSegmentedControlHeight 40.0 
#define kPageControlHeight  20.0 
#define kPageControlWidth  160.0 
#define kSliderHeight   7.0 
#define kSwitchButtonWidth  94.0 
#define kSwitchButtonHeight  27.0 
#define kTextFieldHeight  30.0 
#define kSearchBarHeight  40.0 
#define kLabelHeight   20.0 
#define kProgressIndicatorSize 40.0 
#define kToolbarHeight   40.0 
#define kUIProgressBarWidth 160.0 
#define kUIProgressBarHeight 24.0 

// specific font metrics used in our text fields and text views 
#define kFontName    @"Arial" 
#define kTextFieldFontSize  18.0 
#define kTextViewFontSize  18.0 

// UITableView row heights 
#define kUIRowHeight   50.0 
#define kUIRowLabelHeight  22.0 

// table view cell content offsets 

#define kCellLeftOffset   8.0 
#define kCellTopOffset   12.0 

トニー

+0

私は、これは面白いファイルだと思っていましたが、OS X SDKまたはiPhone SDKのUIConstants.hファイルへの参照が見つかりませんでした。 – mmc

3

まあ、私はここに手足に出て行くんだけど、私が思うに、ハードコーディングレイアウト寸法の考え方(これは、今日、iPhone上で、ピクセル単位です)理論的には可能性があり将来あなたを困らせる(または少なくとも余分な仕事をする)。

ステータスバーやデフォルトのタブバー、またはナビゲーションバーの見た目の大きさを変更することに心配していません...私はユニットの変更が心配です。私は登録されたOS Xの開発者ではありませんが、Snow Leopardはピクセルに基づくのではなく、インターフェイスを指定する解像度に依存しない方法をサポートすると噂されています。

明日、3.0、または来年になることはありませんが、解像度に依存しないインターフェイスのこのアイデアは、特にディスプレイサイズ(具体的には、ディスプレイ解像度)将来の変化。

私は長い間巻き込まれていますが、今後の変更についてはステータスバーのサイズではなく、デバイスのサイズ、およびCocoa Touchでサイズを指定するために使用する単位です。

+1

iPhoneには既に解像度に依存しないインターフェイスがあります。ピクセルは指定しません。単位を指定します。 iPhoneの場合、現在1つの単位は1ピクセルです。しかし、これは将来変更される可能性があります。 – Thanks

+0

さて、私はされます。あなたが正しい。現在のスクリーン・フォーム・ファクタ1の単位= 1ピクセルのため、私は決して考えを与えていない。これは、デバイスのサイズや解像度が変更されたときに非常に重要であることがわかります。 – mmc

+0

はい、ディスプレイのサイズや重要なアスペクト比が変更されると、Appsによっては問題が発生します。しかし、現時点では1つの画面サイズしかないので、あまり心配しません。彼らが本当にiPhone nanoを持っていれば、ちょっとした作業が必要になるだろうが)、それは何百万もの画面サイズとアスペクト比を持つGoogle AndroidではなくiPhone OSを選んだ理由だ。 – Thanks

1

考えられること:ユーザーが電話をかけてから電話をかけているときにアプリケーションを起動すると、ステータスバーの高さが変わります。したがって、システムのUI要素の高さをハードコーディングすることを避けることは間違いありません。

1

UICatalogのサンプルでは "constants.h"が使用されていますが、サンプルにはローカルであり、サンプル開発者が自分の人生を楽にする方法であることは明らかです。上記のすべての問題を含んでいます...将来何か「標準サイズ」が変更された場合、このサンプルは正常に機能しなくなります。

あなたの配置権を得るために他のオブジェクトをクエリする必要がありますが、環境が変化したときに適切に動作するようにする方法です。拡張された「インコール」ステータスバーは完璧な例です。ステータスバーを避けるために20個の「単位」をハードコードすると、通話中にアプリが切断されます。それはあなたがシミュレータで気付くことのないものです(なぜなら、シミュレータでそのオプションを試してみると、アプリをコーディングしていると思ったでしょうから)。

+0

あなたはとても正しい人です。ありがとう。 – Thanks

関連する問題