45

レイアウトがiphone 5(4インチ網膜)と3.5デバイスの両方に収まるようにxibをレイアウトしようとしています。

IOS-5 をサポートする必要があるため、autolayout を使用できません。スプリングとストラットを使用する必要があります。

インターフェイスビルダーですべてを試しました。しかし、私のビューは iphone-3.5-inch の下部を超えているか、iphone-4-inch-retina を完全に満たしていません。

誰かが実際にxibを両方のデバイスと互換性を持たせる方法のヒントを与えることができますか?

より明確にするために、スクリーンショットを追加しています。

属性インスペクタでサイズ 3.5 を設定すると: 属性インスペクタでサイズを 3.5 に設定すると

それはiphone-5に見えます。ボタンの下にスペースがあります。 これは、3.5 インチ デバイスのシミュレータでどのように見えるかです。

インターフェイスビルダーでサイズ4インチを設定した場合。iphone-4 では下のボタンが表示されていないことがわかります。 インターフェイスビルダーでサイズを 3.5 インチに設定した場合

それで、私が使用している設定は何ですかと尋ねます。ここにそれらがあります:

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

4

14 に答える 14

38
  1. UIviewController の新しいカテゴリを追加し、このコードを .h ファイルに追加します

     - (id)initWithNibNameforIphone4:(NSString *)nibNameOrNil4 NibNameforIphone5:(NSString *)nibNameOrNil5 NibNameforIpad:(NSString *)nibNameOrNilpad bundle:(NSBundle *)nibBundleOrNil;
    
  2. このコードを .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;
      }
    
  3. YouProject-Prefix.pch ファイルを開き、ここにカテゴリをインポートします

  4. 今、あなたはこのようなプロジェクト全体でこれを使用するだけです

     self.firstView=[[firstView alloc]initWithNibNameforIphone4:@"firstView4" NibNameforIphone5:@"firstView" NibNameforIpad:@"firstViewIpad" bundle:[NSBundle mainBundle]];
    

    ありがとう、質問があればコメントして、賛成票を投じることを忘れないでください:-)

\

于 2012-11-08T06:43:04.900 に答える
20

iPhone 5 をサポートする必要があるすべてのコントローラーにこれを追加してみてください:

- (void) loadView
{
    [super loadView];
    self.view.frame = [UIScreen mainScreen].bounds;
}
于 2012-12-21T07:58:31.857 に答える
3

3.5 インチと 4 インチのデバイスに別のペン先を使用する必要はありません。4 インチ デバイス用にアプリを設計し、AutoResizingMask を正しく設定すると、正しく動作するはずです。

あなたの場合、 AutoResizingMask を設定するだけです

[view setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];

自動サイズ変更マスクは、ビューを両方のデバイスの位置に正しく配置します。

于 2013-09-05T11:53:02.177 に答える
1

考えがある。UI をヘッダー、ボディ、フッター (Web サイトのように) に分けましょう。次に、コード コンソールで、Size Inspector を見つけて Autosizing を使用します。

正方形の外側の線に注目してください。これは、メイン ビューに対するコントロールの位置です。ヘッダ部とボディ部のコントロール(ナビゲーションバー、UIImageView、UIButtonなど)をTopに、フッタのコントロール(Bookmark、Closeなど)をBottomに設定します。

実行するたびに、コントロールは自動サイズ設定にアタッチされます。iPhone 5 ではヘッダー/ボディとフッターの間にスペースができますが、問題ないと思います。

于 2012-11-08T03:05:10.447 に答える
1

以下の行を定義し、デバイスに基づいて状態を確認します。

#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);
}
于 2013-11-20T09:36:02.680 に答える
1

私も 3.5" 対 4" で問題を抱えていましたが、何が悪いのか誤解していたので、誰かの役に立てばと思ってここに記録しておきます。

アクセスしようとしても、同様のイベントself.view.frameが発生するまで正しく報告されません。内部viewDidAppearからアクセスしようとすると、自動サイズ調整が行われる前にフレームの寸法が報告されることがあります。self.view.frameviewDidLoad

于 2014-02-07T02:06:37.340 に答える
0

自動レイアウトを使用しないと、コードで多くのことを処理する必要がある場合があります。ほとんどのレイアウトはスプリングとストラットでうまく機能すると思いますが、一部のUI要素では機能しないため、ビューのサイズに応じて特定のオブジェクトのフレームを手動で設定する必要があります。

于 2012-11-07T17:56:34.927 に答える
0

上記の ivanzoid のスニペットは、ナビゲーションとツールバーのオフセットを差し引くことを覚えている限り、画面全体のサイズをクエリすることでうまくいきます (ほとんどの条件下で合計 64)。

調整する必要があるのはビューの高さです。それ以外の場合は、スプリングとストラットが処理します。

iPhone 5 で自分のアプリを再テストすると、ランタイム コントロールの位置を調整して、1 つの画面でこれを行うだけで済みました。他のすべてのケースは、XIB のデフォルトで処理されます。

于 2013-05-01T15:13:56.093 に答える
0
  • ストーリーボードで、[ファイル インスペクタを表示] をクリックします。
  • Interface builder document->Document versioning の下で、Deployment=iOS 5 (または任意の選択) を選択します。

これが機能しない場合は、各ビューを操作する必要があります。それらを選択します。それぞれの属性インスペクターで、[表示] セクションの下にある [モード属性] を参照してください。これを「再描画」に設定します。

それでも満足のいく結果が得られない場合は、表示サイズを使用するすべてのバージョンの中で最小に設定してください。Mode 属性を「Scale to fill」に設定します。

プログラム的には、Mode 属性はview.contentmodeプロパティです。

于 2012-11-07T18:00:28.960 に答える