如何根据设备类型将帧设置为UIBUTTON?

时间:2015-10-10 05:58:51

标签: ios7

我希望基于像5,6,6plus这样的设备将帧设置为UIButton,我尝试使用下面的代码但是我遇到了6plus的问题,因为6,6plus同样的方法(IS_IPHONE_6_6PLUS)被调用了,什么,是错的我的代码请告诉我。

#define IS_IPHONE_6_6PLUS  ([[UIScreen mainScreen] bounds].size.height >= 667)?TRUE:FALSE
#define IS_IPHONE6PLUS  ([[UIScreen mainScreen] bounds].size.width >= 414)?TRUE:FALSE
#define IS_IPHONE_4  ([[UIScreen mainScreen] bounds].size.height == 480)?TRUE:FALSE
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )


- (void)viewDidLoad
{
if (IS_IPHONE_5)
     {
        loginview.frame = CGRectMake(108, 393, 35, 35);
        _signInButton.frame=CGRectMake(173,393, 35,35);
     }
     else if (IS_IPHONE_6_6PLUS)
     {
         loginview.frame = CGRectMake(128, 476, 35, 35);
         _signInButton.frame=CGRectMake(208,476, 35,35);

     }
     else if (IS_IPHONE6PLUS)
     {

         loginview.frame = CGRectMake(118, 506, 35, 35);
         _signInButton.frame=CGRectMake(163,506, 35,35);

     }
}

提前感谢。

2 个答案:

答案 0 :(得分:0)

不确切知道如何定义设备的大小。我认为这是错误的我定义不同设备的大小如下: -

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

//--Use main screen to check screen height and width
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

//--Defining Length According to size of different Devices
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

现在您可以设置按钮(x,y,宽度,高度)以将其设置在不同的设备中。

如: -

    if(IS_IPHONE_4_OR_LESS)
    {
        //set your button according to iphone 4
       //Your button looks in iphone 4 or less
    }
    if(IS_IPHONE_5)
    {
        //set your button according to iphone 5
       //Your button looks in iphone 5 
    }
    if(IS_IPHONE_6)
    {
        //set your button according to iphone 6
       //Your button looks in iphone 6
    }
    if(IS_IPHONE_6P)
    {
        //set your button according to iphone 6 plus
       //Your button looks in iphone 6 plus
    }

注意: -

它还包括 iphone和ipad 的大小。所以,您可以在视图控制器中使用常量文件导入,并使用与上面相同的内容。

答案 1 :(得分:0)

如果您的目的只是确保在@ 3x设备和@ 2x设备&#34;细线&#34;保持薄,即一个像素宽,你做错了,不必要地复杂。

只需加载@ 3x。 @ 2x图片版本作为您应用中的资源。 您不应该尝试通过代码推断和处理屏幕大小。 - 具有意外屏幕尺寸的新设备将破坏您的应用。 - 您的应用程序无法在新的意外屏幕尺寸下正常运行(请考虑在较新的iPad上进行双视图多任务处理)。