レイアウトがiphone 5(4インチの網膜)と3.5デバイスの両方に収まるようにxibをレイアウトしようとしています。
IOS-5をサポートする必要があるため、自動レイアウトを使用できません。スプリングとストラットを使用する必要があります。
インターフェイスビルダーですべてを試しました。しかし、私の意見はiphone-3.5-inchの底を越えているか、iphone-4-inch-retinaを完全に埋めていないかのどちらかです。
誰かが実際に両方のデバイスと互換性のあるxibを作成する方法のヒントを提供できますか?
より明確にするために、スクリーンショットを追加しています:
属性インスペクターでサイズ3.5を設定すると:
iphone-5に見えます。ボタンの下にスペースがあります。
インターフェイスビルダーでサイズを4インチに設定した場合。 iphone-4では下のボタンが見えないことがわかります。
そのため、私が使用している設定は何かを尋ねられます。それらは次のとおりです。
UIviewControllerの新しいカテゴリを追加し、このコードを.hファイルに追加します
- (id)initWithNibNameforIphone4:(NSString *)nibNameOrNil4 NibNameforIphone5:(NSString *)nibNameOrNil5 NibNameforIpad:(NSString *)nibNameOrNilpad bundle:(NSBundle *)nibBundleOrNil;
このコードを.mファイルに追加します
- (id)initWithNibNameforIphone4:(NSString *)nibNameOrNil4 NibNameforIphone5:(NSString *)nibNameOrNil5 NibNameforIpad:(NSString *)nibNameOrNilpad bundle:(NSBundle *)nibBundleOrNil
{
if (self = [super init])
{
self = [self initWithNibName:[self CheckDeviceIphone4:nibNameOrNil4 Iphone5:nibNameOrNil5 Ipad:nibNameOrNilpad] bundle:nibBundleOrNil];
}
return self;
}
-(NSString *)CheckDeviceIphone4:(NSString *)iphone4 Iphone5:(NSString *)iphone5 Ipad:(NSString *)ipad {
return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) ? ipad :([[UIScreen mainScreen] bounds].size.height == 568) ? iphone5 :iphone4;
}
YouProject-Prefix.pchファイルを開き、ここにカテゴリをインポートします
今、あなたはこのようなプロジェクト全体でこれを使用するだけです
self.firstView=[[firstView alloc]initWithNibNameforIphone4:@"firstView4" NibNameforIphone5:@"firstView" NibNameforIpad:@"firstViewIpad" bundle:[NSBundle mainBundle]];
おかげで、質問があればコメントして、投票することを忘れないでください:-)
\
IPhone 5をサポートする必要があるすべてのコントローラーにこれを追加してみてください。
- (void) loadView
{
[super loadView];
self.view.frame = [UIScreen mainScreen].bounds;
}
Interface-builderを使用して、表示サイズをNoneに設定するだけです
。
今日はこれに苦労していましたが、Retina 4インチシミュレーターで実行しているときでも、何をしようとも、常に320x480として表示されていました。[UIScreen mainScreen] .boundsでも320x480を返していました。
[email protected]起動画像を追加することが、iOSにアプリを「レチナ4」準備完了として認識させるための鍵であることがわかりました。 2つの独立したxib、Interface Builderでの設定変更、loadViewのオーバーライドなどは必要ありません。
2つのxibファイルを使用するソリューションを選択した場合; initWithNibName()メソッドで、異なるnib名でsuperを呼び出すだけです。
568の高さではなく、元の480の高さの寸法でテストして、Appleが大きな画面をリリースした場合、少なくとも大きなxibが将来的には '小さい方と同じくらいレターボックスに入れてください。
// From MainView.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480)
{
// iPhone Classic
self = [super initWithNibName:@"MainView" bundle:nibBundleOrNil];
}
else
{
// iPhone 5 or maybe a larger iPhone ??
self = [super initWithNibName:@"MainView5" bundle:nibBundleOrNil];
}
return self;
}
3.5インチと4インチのデバイスに別のペン先を使用する必要はありません。 4インチデバイス用のアプリを設計し、AutoResizingMaskを正しく設定すると、正しく動作するはずです。
あなたの場合、AutoResizingMaskを
[view setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];
自動サイズ変更マスクは、両方のデバイスでビューをその位置に正しく配置します。
3.5 "対4"でも問題が発生していましたが、何が間違っているのかを誤解していたので、誰にも役立つようにここに文書化したいと思いました。
self.view.frame
にアクセスしようとすると、viewDidAppear
または同様のイベントが発生するまで正しく報告されません。 viewDidLoad
内からself.view.frame
にアクセスしようとすると、フレームの寸法を報告できますbefore自動サイズ変更が行われます。
考えがある。 UIをヘッダー、本文、およびフッター(Webサイトなど)に分離します。次に、コードコンソールで[サイズインスペクター]に移動し、自動サイズ設定を使用します。
正方形の外側の線に注目してください。メインビューに対するコントロールの位置です。 Topに接続されたヘッダー部分と本文部分のコントロール(ナビゲーションバー、UIImageView、UIButtonなど)とフッターのコントロール(Bookmark、Closeなど)をBottomに設定します。
実行するたびに、コントロールは自動サイズ設定に添付されます。 iPhone 5ではヘッダー/本文とフッターの間にスペースがありますが、問題ないと思います。
以下の行を定義し、デバイスに基づいて条件を確認します。
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 )
if (IS_IPHONE_5) {
btnBookmark.frame=CGRectMake(0, 460, 100, 70);
btnBookmark.frame=CGRectMake(150, 460, 100, 70);
}
else {
btnBookmark.frame=CGRectMake(0, 360, 100, 70);
btnBookmark.frame=CGRectMake(150, 360, 100, 70);
}
自動レイアウトを使用しないと、コードで多くのことを処理する必要がある場合があります。ほとんどのレイアウトはスプリングとストラットでうまく機能すると思いますが、一部のUI要素ではできないため、ビューのサイズに応じて特定のオブジェクトのフレームを手動で設定する必要があります。
これが機能しない場合は、各ビューで作業する必要があります。それらを選択します。それぞれの属性インスペクターの「表示」セクションで、「モード属性」を参照してください。これを「再描画」に設定します。
それでも満足のいく結果が得られない場合は、ビューサイズを、使用するすべてのバージョンの最小値に設定します。そして、Mode属性を「Scale to fill」に設定します。
プログラム的に、Mode属性は view.contentmode propertyです。
画面全体のサイズを照会する上記のivanzoidのスニペットは、ナビゲーションとツールバー(ほとんどの条件で合計64)のオフセットを減算することを忘れない限り、うまくいきます。
調整する必要があるのはビューの高さです。それ以外の場合は、スプリングとストラットがそれを処理します。
IPhone 5でアプリを再テストしました。これは、1つの画面で実行時制御位置調整を行うだけで済みました。他のすべてのケースはXIBのデフォルトで処理されます。
2つのxibを使用したくなく、自動サイズ設定を使用したい場合 here