iPhone 6有一个不同的故事板吗?

10 浏览
0 Comments

iPhone 6有一个不同的故事板吗?

当我们拥有iPhone 4和5时,我们检查了屏幕尺寸,并为每个iPhone制作了2个storyboard。

//iPhone 4

如果(height == 480)

{

storyboard = [UIStoryboard storyboardWithName:@"StoryboardiPhone" bundle:nil];

NSLog(@"设备具有3.5英寸显示屏。");

}

//iPhone 5

else if(height == 568)

{

storyboard = [UIStoryboard storyboardWithName:@"StoryboardiPhone5" bundle:nil];

NSLog(@"设备具有4英寸显示屏。");

}

//iPad

else

{

storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];

NSLog(@"设备具有iPad显示屏");

}

现在又有了2款新的iPhone,问题是,是否正确为所有iPhone和iPad制作5个storyboard?对我来说似乎是错误的做法,但我找不到一种方法来在一个设备上安排视图,并使其适应所有其他设备 - 并确保它始终正常工作。

现在应该采取什么正确的方法?

0
0 Comments

(iPhone 6 a different storyboard?)是一个问题,它的出现原因是需要为不同的尺寸类别设计不同的UI界面,而之前的代码根据设备选择要加载的故事板,现在不再需要这样做了。解决方法是在Interface Builder中为wAny/hAny的尺寸类别设计UI界面,并应用自动布局约束来描述视图如何适应不同的尺寸类别。如果需要,可以为特定的尺寸类别覆盖一些约束。另外,建议观看一段介绍自适应UI和尺寸类别的WWDC视频。然而,有时候尺寸类别无法满足某些需求,比如苹果在提交应用时要求兼容3.5英寸的显示屏(截至目前为止)。对于iPhone 4来说,适用于iPhone 5到6+的自动布局会导致太多的拥挤。

0
0 Comments

使用AutoLayout是最佳方法,但如果由于某种原因仍然需要在不同的屏幕尺寸上使用不同的storyboard,可以使用以下代码进行实现。

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    //iPad
    storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
}else{
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){
        // The iOS device = iPhone or iPod Touch
        CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
        if (iOSDeviceScreenSize.height == 480){
            // iPhone 3/4x
            storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone3_4X" bundle:nil];
        }else if (iOSDeviceScreenSize.height == 568){
            // iPhone 5 - 5s - 4 inch
            storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5_5S" bundle:nil];
        }else if (iOSDeviceScreenSize.height == 667){
            // iPhone 6 4.7 inch
            storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone6" bundle:nil];
        } else if (iOSDeviceScreenSize.height == 736){
            // iPhone 6 Plus 5.5 inch
            storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone6Plus" bundle:nil];
        }
    }
}

为了支持iPhone 6和iPhone 6 Plus的屏幕分辨率,需要添加启动图像。

此方法在iOS7/8以上版本中不推荐使用,建议使用AutoLayout代替。

0
0 Comments

使用AutoLayout并编写适当的约束条件,让系统根据不同的尺寸调整UI大小。打开Storyboard并开始设计时,应该选择哪种iPhone呢?如果不使用AutoLayout,直到现在为止都是可以的,但现在我认为它变得更加重要了。可能应该选择分辨率最小的iPhone。否则,不重要,因为UI会被自动拉伸。

0