0

私のアプリは、プログラムで作成している 3 つのボタンで構成されており、ナビゲーション バーのすぐ下に配置されています。私が抱えている問題は、シミュレーターでアプリを実行しているときに、ボタンが iphone 3.5 に完全に配置されていることですが、新しい大きな画面サイズでは、ボタンの位置が少し低くなります。私のコードでは、self を使用しています.view.frame.size.height-465 を y 座標として使用すると、画面サイズに関係なくボタンが適切な位置に配置されるようになります。ビューのサイズが変更されたときの同じ位置。iPhone 5シミュレーターでプログラムを実行するたびに、ボタンがわずかに下に移動するため、私が間違っていると思いますか。

編集: 両方の画面サイズでボタンのスクリーンショットを添付しているので、正確に何について話しているのかがわかります。

http://imgur.com/Igb5Hdq&UJ1TiQk#0
http://imgur.com/Igb5Hdq&UJ1TiQk#1

4

4 に答える 4

3

コードで何もするべきではありません。IB でナビゲーション バーのすぐ下に配置すると、どちらの画面サイズでも (自動レイアウトのため) 同じ距離を維持する必要があります。

編集後:

自動レイアウトを使用しておらず、コードですべてを行っている場合は、高さではなく、上からの y 値を設定する必要があります - 465.y には固定値を使用してください。以下のコードでは、フレームは CustomButton の init メソッドで設定されており、その場所を変更するだけです。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    CustomButton1 *button = [[CustomButton1 alloc] init];
    [button addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"test" forState:UIControlStateNormal];
    button.center = CGPointMake(self.view.center.x, 30);
    [self.view addSubview:button];
}
于 2013-01-28T19:29:58.593 に答える
1
 CGSize screenSize = [[UIScreen mainScreen] bounds].size;

            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
                if (screenSize.height > 480.0f) {
                    /*Do iPhone 5 stuff here.*/

        myButton.frame = CGRectMake(0,0,129,412);
                } else {
                    /*Do iPhone Classic stuff here.*/ 

    myButton.frame = CGRectMake(0,0,123,412);
                }
            } else {
                /*Do iPad stuff here.*/
            }
于 2013-01-28T19:26:10.793 に答える
0

フレームではなく制約を使用することを強くお勧めします。それはあなたが求めていることを正確に行い、はるかに簡単になります。あなたのコードは次のようになります

[self.superViewOfButton addSubview:self.button1];
[self.superViewOfButton addSubview:self.button2];
[self.superViewOfButton addSubview:self.button3];

 NSDictionary *viewsDic = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.button1, self.button2, self.button3, nil]
                                                      forKeys:[NSArray arrayWithObjects:@"button1", @"button2", @"button3", nil]];

[self.superViewOfButton      addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[button1]"     options:0 metrics:0 views:viewsDic]];
[self.superViewOfButton      addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button1]"     options:0 metrics:0 views:viewsDic]];
[self.superViewOfButton      addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[button2]"      options:0 metrics:0 views:viewsDic]];
[self.superViewOfButton      addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button2]"      options:0 metrics:0 views:viewsDic]];

Visual Syntax Language のリンクは次のとおりです: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/formatLanguage.html

すべてのコントロールを

button1.translatesAutoresizingMaskIntoConstraints = NO;

最初は少し多すぎるように見えるかもしれませんが、約 5 分間読むと、非常に単純になり、アプリケーションの柔軟性が大幅に向上します。お役に立てれば。

于 2013-01-28T23:59:56.010 に答える
-2
  1. これを定義する

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

2.このコードを使用

-(void)viewDidLoad  {
if( IS_IPHONE_5 )
   {
   int newY=(self.view.frame.size.height +( 568-480) )-465;
   [myButton setFrame:CGRectMake(0,newY,width,height);
   }  
else
   {
   int newY=(self.view.frame.size.height-465;
   [myButton setFrame:CGRectMake(0,newY,width,height);
   }


}
于 2013-01-28T20:03:12.057 に答える