首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >场景-根据iPad或iPhone使用专用故事板

场景-根据iPad或iPhone使用专用故事板
EN

Stack Overflow用户
提问于 2021-04-12 20:46:32
回答 2查看 198关注 0票数 1

苹果现在希望我们用“场景”而不是窗口和屏幕来显示iPad和iPhone的内容。现在,在添加了对场景的支持之后,我似乎失去了用故事板将iPad或iPhone作为目标的能力。

我把我的场景放在下面的褶皱里:

这是从一个新项目中复制出来的,因为苹果似乎忘记了如何在现有的应用程序中添加场景。另一个苹果公司没有充分记录的例子!

现在,我似乎已经失去了为iPad使用不同的故事板的能力,而不是iPhone。

虽然我可以在iPad上使用与iPhone相同的故事板,但我的应用程序用我为iPad提供的专用界面看起来更好,因为我使用它提供的额外房地产来提供更好的最终用户体验。iPhone很好,它的界面最适合小型显示器,但在iPad上看起来很贫乏。

帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-12 20:54:14

现在我似乎失去了用不同的故事板为iPad使用不同的iPhone的能力

这很简单(而且,正如您所说,没有文档化)。您需要Info.plist中两个完全独立的场景清单条目,即UIApplicationSceneManifestUIApplicationSceneManifest~ipad。它们只是指定了不同的UISceneStoryboardFile值,并且您都设置好了,就像场景出现之前一样。

票数 4
EN

Stack Overflow用户

发布于 2021-04-12 20:46:32

也许有更好的方法来做这件事,但是在搜索时我看不到其他人在报道这个。因此,我给出了我的解决方案,这已经被应用商店接受,让其他人审查,使用,改进,最重要的是,不要浪费任何时间在鹅卵石上寻找一个可能不存在的解决方案!

我解决这个问题的方法是添加另一个情节提要和视图控制器,以便处理如果是iPhone或iPad的决策,然后立即加载目标故事板。我称之为“入场决定”。唯一的问题是当关闭后续的视图时,您必须确保正确地执行它,否则您将返回“进入决定”。在空白视图下,最终用户可能会被卡住。因此,为了确保用户永远不会被卡住,我在视图中添加了按钮,这样如果苹果在我们不知道的范围内发生了变化,它们就可以手动导航。最好现在就报道。

第1步,创建一个新的故事板,“进入决定”:

因为我是一个很好的人,我向用户解释,这是一个错误,并道歉。我还给了他们两个按钮,iPad和iPhone。从理论上讲,如果一切顺利,最终用户将永远不会看到这一点,但对我们来说,最好是涵盖这一可能性。

第二步,一旦视图控制器加载,让它移动到我们真正想要的正确的故事板。

代码语言:javascript
复制
-(void)viewDidLoad {

// Need to decide which storyboard is suitable for this particular method.
// Loading from class: https://stackoverflow.com/questions/9896406/how-can-i-load-storyboard-programmatically-from-class

if ( [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad )
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
    ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"myViewController"];
    [self.navigationController pushViewController:detailViewController animated:YES];
}
else
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"myViewController"];
    [self.navigationController pushViewController:detailViewController animated:YES];
}

}


- (IBAction)pickediPhone:(id)sender {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"myViewController"];
    [self.navigationController pushViewController:detailViewController animated:YES];
}

- (IBAction)pickediPad:(id)sender {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
    ViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"myViewController"];
    [self.navigationController pushViewController:detailViewController animated:YES];
}

这没有什么特别之处,因为它是一个检测哪个设备,然后加载正确的故事板的混合体。为了完全公开,我包含了一个引用,返回到我用来加载那些故事板的原始代码。

另外两种方法只是按下按钮,这里显示的是完整性。

第三步,更新plist内部的场景配置,使其目标进入决策,而不是Main。

您的目标是一个不同的故事板,因此这需要更新。

第4步,返回到主屏幕。

在我的应用程序中,我有一个欢迎屏幕,然后是表视图或其他视图,取决于它的位置。有些类型工作查找没有任何问题,但由于我使用的导航控制器,我需要正确返回。因此,这个命令对主屏幕上的最后一个"back“命令最有效:

代码语言:javascript
复制
[self.navigationController popViewControllerAnimated:YES];

其他选项要么回到进入决定(我们只是以防万一的错误),要么什么也不做:

代码语言:javascript
复制
[self.navigationController popToRootViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:NULL];

这就是我如何能够使用我现有的故事板,在这个应用程序生命的几年里,它已经为iPhone和iPad进行了完美的调整,并且仍然能够支持苹果想要转移到场景中的愿望。我的应用程序需要为另一个目的使用场景,因此我别无选择,只能走这条路。我做了很多尝试,试图在场景加载时捕捉它们,但是最初的场景似乎是在没有您这个程序员的情况下加载的,在如何使用或者使用哪一种场景时,我得到了任何选择。您需要这个预览控制器给您返回该功能,这是一个解决方案,它是活跃在应用商店现在。

对我好点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67065466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档