区分iphone 4 vs 5 vs 6 vs 6+ with portrait with size class

时间:2015-01-15 12:21:28

标签: ios iphone xcode storyboard size-classes

我为每种设备设计了不同的偏移量和元素大小。 是否有任何方法可以为纵向中的不同iphone设置故事板(使用大小类或其他)中的约束的不同值(它们都是紧凑的|常规的)?

如果不是 - 什么是解决此类任务的最佳方法?

更新

例如我有徽标,在每个(包括不同的iphone)平台上,徽标的顶部偏移量是不同的(即使是点数)。

我想避免像那样的代码

- (CGFloat)topLogoConstraintAccordingToSize:(CGSize)size {
    CGFloat top = 0;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        if (size.height > size.width){
            top = 56;
        } else {
            top = 35;
        }
    } else {
        if (IS_IPHONE_4){
            top = 36;
        } else if (IS_IPHONE_5){
            top = 22;
        } else if (IS_IPHONE_6){
            top = 50;
        } else if (IS_IPHONE_6_PLUS){
            top = 56;
        }
    }
    return top;
}

//宇宙中的其他地方

self.logoTopConstraint.constant = [self topLogoConstraintAccordingToSize:size];

此外,我不想为每个平台创建单独的故事板 - 它更糟糕。

3 个答案:

答案 0 :(得分:0)

您可以将约束与后面的代码连接起来,并根据需要更改值。

这可能看起来像: - 在.h文件中:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraint;

-in .m文件:

if ([platform isEqualToString:@"iPhone3,3"])    constraint.constant=1;//put value you want instead of 1,2 and 3
if ([platform isEqualToString:@"iPhone4,1"])    constraint.constant=1;
if ([platform isEqualToString:@"iPhone5,1"])    constraint.constant=2;
if ([platform isEqualToString:@"iPhone5,2"])    constraint.constant=2;
if ([platform isEqualToString:@"iPhone5,3"])    constraint.constant=2;
if ([platform isEqualToString:@"iPhone5,4"])    constraint.constant=2;
if ([platform isEqualToString:@"iPhone6,1"])    constraint.constant=2;
if ([platform isEqualToString:@"iPhone6,2"])    constraint.constant=2;
if ([platform isEqualToString:@"iPhone7,1"])    constraint.constant=3;
if ([platform isEqualToString:@"iPhone7,2"])    constraint.constant=3;

但是,我不确定你想要实现的目标。每个元素都是分数,看起来应该很好(1x,2x和3x)。你能解释一下你想做什么吗?

答案 1 :(得分:0)

如果您以编程方式执行此操作,则可以测试屏幕高度(或宽度),例如:

<globalization uiCulture="es" culture="es-MX" />

iphone屏幕高度如下:

iphone 5 = 568.0

iPhone 6 / 6s / 7 = 667.0

iphone 6/7 plus = 736.0

答案 2 :(得分:-1)

将此行粘贴到标题

下的AppDelegate.m中
 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:(v) options:NSNumericSearch] != NSOrderedAscending)
 #define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

并且在应用程序中启动了

       UIStoryboard *mainStoryboard = nil;
      if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
   {


    if (IS_WIDESCREEN)
    {

        //4 inch screen
        mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];


    }
    else
    {

        if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
        {
            mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];

        }
        else
        {
            //3.5 inch screen
            mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_legacy_IPhone" bundle:nil];
        }
    }
}