gpt4 book ai didi

iOS 自定义容器 VC 和需要特定方向的子项

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:09 26 4
gpt4 key购买 nike

我尝试了很多方法来寻找这个问题的答案,但我看到的很多主要是 Root View Controller 中 UINavigationController 的锁定旋转问题。

在我的项目中,我有一个使用 View Controller Containment 的自定义 UIViewController。我没有实现 -(BOOL)shouldAutomaticallyForwardAppearanceMethods-(BOOL)shouldAutomaticallyForwardRotationMethods 方法,因为它们是默认实现,都已经返回 YES-(BOOL)shouldAutorotate 已实现并返回 YES

显示的第一个 View Controller 支持所有方向。这是按预期工作的。

在 segue 期间代替第一个加载的第二个 View Controller 具有条件方向。 View Controller 本质上是一个包含用于显示 PDF 页面的 UIPageViewController 的 View Controller 。条件方向是 PDF 的方向。 -(NSUInteger)supportedInterfaceOrientations 方法返回 UIInterfaceOrientationMaskLandscape 如果 PDF 是横向的,或者 UIInterfaceOrientationMaskPortrait 如果 PDF 是纵向的。这个方法确实被调用了。然而,在我的 segue 期间,我调用:

[container transitionFromViewController:source 
toViewController:dest
duration:1.0
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{}
completion:^(BOOL finished){/*relevant removal of vc's from parents*/}];

该方法需要我支持的方向,但它似乎没有应用它们。我可以使用 [[UIDevice currentDevice] performSelector:@selector(setOrientation:) withObject:(__bridge id)(void *)[dest preferredInterfaceOrientationForPresentation]; 但是这个应用程序可能会变成商店应用程序,所以我避免这种情况。

欢迎提出任何建议。

最佳答案

在大多数情况下,UINavigationController 的答案应该可以帮助您进行设置。不过,我过去曾使用过一种技巧。在我的父 VC 中,我实现了以下方法:

- (UIViewController *)topViewController {
return self.childViewControllers.lastObject;
}

- (BOOL)shouldAutorotate {
return [[self topViewController] shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations {
return [[self topViewController] supportedInterfaceOrientations];
}

这会有点工作,但你必须旋转到支持的方向,然后它才会遵守第二个 View Controller 的限制。诀窍是在 - (BOOL)shouldAutorotate 中返回 NO,直到 viewDidAppear: 被调用。像这样:

- (BOOL)shouldAutorotate {
return _viewDidShow ? YES : NO;
}

然后在你调用转换方法之前调用这个:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];

关于iOS 自定义容器 VC 和需要特定方向的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14818788/

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