相关疑难解决方法(0)

如何在iOS 7中以编程方式设置设备方向?

我正在使用AutoLayout在iPad应用程序上工作,如果用户启用某种模式("抬头"模式),我想只支持纵向(或纵向颠倒)方向,此外,如果设备在风景,我想自动切换到纵向模式.

在顶视图控制器中,我有以下内容:

- (NSUInteger) supportedInterfaceOrientations {
    if (self.modeHeadsUp) {
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
    } else {
        return UIInterfaceOrientationMaskAll;
    }
}

- (BOOL) shouldAutorotate {
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

基于我在其他地方看到的答案,答案似乎是我应该使用"application setStatusBarOrientation".因此,在用户选择"抬头"模式的方法中,我包括:

    UIApplication *application = [UIApplication sharedApplication];
    [application setStatusBarOrientation:UIInterfaceOrientationPortrait
                                animated:YES];
Run Code Online (Sandbox Code Playgroud)

但是,这根本就没有做任何事情.虽然我可以物理移动设备以使其旋转为纵向,但它不会自动移动.

实际上,在运行上面的代码后尝试以横向模式尝试以编程方式设置方向时,当我使用以下代码查询应用程序"statusBarOrientation"时,它对于横向保持为"4":

UIApplication *application = [UIApplication sharedApplication];
int orientation = [application statusBarOrientation];
self.movesTextView.text = [NSString stringWithFormat:@"ORIENTATION %d", orientation];
Run Code Online (Sandbox Code Playgroud)

好像autolayout可能没有被setStatusBarOrientation触发,所以我试图在之后添加这个代码,没有效果:

    [super updateViewConstraints];
    [self.view updateConstraints];
Run Code Online (Sandbox Code Playgroud)

我意识到Apple希望将设备方向放在用户手中.但是,我希望能够在不进行"抬头"模式时支持横向模式.

我错过了能够强制改变方向的东西吗?

xcode autorotate ios autolayout ios7

71
推荐指数
4
解决办法
10万
查看次数

应该将viewDidUnload中的哪些内容移动到didReceiveMemoryWarning?

在新的iOS 6中,viewDidUnload不推荐使用,我们已被指示使用它didReceiveMemoryWarning来管理UIViewController实例和子类中的对象.将nils分配给内部的UIView didReceiveMemoryWarning类似于内部的方式同样有效viewDidUnload吗?

我问这个是因为这两种方法似乎有所不同.似乎didReceiveMemoryWarning不能保证viewDidLoad再次调用以重新实例化任何必要的UIViews.

我怀疑在iOS 6中,内存管理完成后无需手动解除分配UIView.请帮助我了解在理解UIViewController的生命周期时我错过了什么.

uiviewcontroller didreceivememorywarning ios viewdidunload ios6

7
推荐指数
1
解决办法
3964
查看次数

在UITabBarController中是否多次调用viewDidLoad?

我在我的应用程序中使用SWRevealViewController(以获得滑出侧面板)但是每当用户导航到另一个viewController(如'settings')并返回时,一切都会重置.我知道这是故事板的正常行为,因为实例化了新VC并且每次调用viewDidLoad.我试图通过将VC存储在AppDelegate中的数组中然后返回到原始的viewController来解决这个问题,这会阻止在最初重新呈现原始VC时调用viewDidLoad,但我仍然发现它在之间移动时被随机调用veiwcontroller's,重置我的所有属性等.在研究中,Apple文档确实说不要假设viewDidLoad只会被调用一次.

在切换标签时,这种行为在UITabBarController中是显而易见的,因为我正在考虑放弃SWRevealViewController并使用它而不是让它不那么头痛.

我应该以不同的方式处理,即.在NSUserDefaults中存储'state'并在viewDidLoad上恢复?

提前致谢.

objective-c uitabbarcontroller viewdidload ios

5
推荐指数
1
解决办法
4162
查看次数