gpt4 book ai didi

iphone - 多个 Storyboard来管理视网膜 4 和视网膜 3.5

转载 作者:行者123 更新时间:2023-12-01 17:17:27 25 4
gpt4 key购买 nike

您好我正在尝试为 iPhone 5 和 iPhone 4/4s 开发应用程序。我在使用 Storyboard时遇到问题:我为 iPhone 4/4s 设计了 Storyboard,但是当我在 iPhone 5 上尝试时,我的 GUI 很糟糕......
我在互联网上读到最简单的解决方案是使用 2 个 Storyboard:一个用于视网膜 4,一个用于视网膜 3.5。
我想问你如何通过代码调用不同的 Storyboard?
我创建了 2 个 Storyboard文件:

MainStoryboard.storyboard
MainStoryboardiPhone5.stroryboard

我在互联网上发现我应该获取设备的屏幕尺寸并加载不同的 Storyboard,但我应该在哪里做呢?在 Appdelegate.m 方法中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

为了检测显示器的大小,我在网上创建了这段代码:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (screenBounds.size.height == 568) {
NSLog(@"retina 4");
} else {
NSLog(@"retina 3.5");
}
return YES;
}

现在,当我检测到视网膜 4 或视网膜 3.5 时,我应该只找到一种方法来调用不同的 Storyboard。
我应该怎么做才能调用正确的 Storyboard?
谢谢

最佳答案

iPhone 5 的屏幕高度为 568。

你可以简单地使用这个宏来检查它的 iPhone 5:

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

然后在您的 AppDelegate.m 中检查 iPhone 5 并加载特定的 Storyboard。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *mainStoryboard = nil;
if (IS_IPHONE_5) {
mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboardiPhone5" bundle:nil];
}
else {
mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
}

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [mainStoryboard instantiateInitialViewController];
[self.window makeKeyAndVisible];

return YES;
}

更新:

使用以下宏
// Check if device is iPhone 5
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON)

// Get the storyboard name according to the device
#define GET_STORYBOARD_NAME(controllerName) IS_IPHONE_5 ? controllerName : [NSString stringWithFormat:@"%@-iPhone4",controllerName]

现在在您的 应用代表
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:GET_STORYBOARD_NAME(@"Main") bundle:nil];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [storyboard instantiateInitialViewController];
[self.window makeKeyAndVisible];
return YES;
}

注:

iPhone4 Storyboard名称始终应采用此格式
YourStoryboardName-iPhone4.storyboard

关于iphone - 多个 Storyboard来管理视网膜 4 和视网膜 3.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17040406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com