0

我的应用程序由三个按钮组成,这些按钮是我以编程方式创建的,位于导航栏的正下方。我遇到的问题是,在模拟器中运行我的应用程序时,按钮非常适合 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]];

这是视觉语法语言的链接:http: //developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/formatLanguage.html

并记住将所有控件设置为

button1.translatesAutoresizingMaskIntoConstraints = NO;

起初它可能看起来有点多,但在阅读大约五分钟后,它非常简单,并且使您的应用程序更加灵活。希望这可以帮助。

于 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 回答