导航栏方向问题

时间:2012-04-17 13:09:42

标签: iphone ios sdk orientation

我搜索了每一个地方,但没有找到解决方案我是iphone的新手。在我得到的每个地方导航的高度或我的视图不是像问题的方向旋转。我的视图是旋转但我的导航栏如果你有解决方案,那么请一些人帮我。谢谢我已经显示了我用于Orientation的一些代码。当我点击我的标签栏时我的模拟器是自动旋转我希望标签栏也旋转但是使用这个代码只有模拟器旋转而不是标签栏和导航栏,抱歉我的英文不好。

CGAffineTransform transform = CGAffineTransformIdentity;

switch ([[UIApplication sharedApplication] statusBarOrientation]) 
{

    case UIInterfaceOrientationPortrait:
        transform = CGAffineTransformMakeRotation(M_PI_2);
        break;

    default:
        break;
}

[[UIApplication sharedApplication]setStatusBarOrientation:UIInterfaceOrientationPortrait];

[UIView animateWithDuration:0.2f animations:^ {

    [self.navigationController.view setTransform:transform];

}];

[self.view setFrame:CGRectMake(0, 0, 320, 480)];
[self.view setNeedsLayout];

1 个答案:

答案 0 :(得分:1)

这段代码,没有违法行为,非常好奇。我不确定你要做什么。你想解决什么问题?玩CGAffineTransform可以肯定会产生奇怪的结果,就像你描述的那样,如果你不是很小心。

如果您只是想确保您的应用成功支持横向和纵向方向,则可以在视图控制器中实施shouldAutorotateToInterfaceOrientation。执行此操作时,所有各种控件都将相应地重新定向。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Support all orientations on iPad
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
        return YES;

    // otherwise, for iPhone, support portrait and landscape left and right

    return ((interfaceOrientation == UIInterfaceOrientationPortrait) ||
        (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
        (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

但如果我误解了你想要做的事情,也就是说,你正在尝试做一些比仅仅支持横向和纵向方面更复杂的事情,请告诉我。


我道歉,因为我不记得我最初获得此代码的位置(但它在SO here中引用),但以下内容可用于强制横向方向:

首先,确保你的shouldAutoRotateToInterfaceOrientation应如下所示:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
        (interfaceOrientation == UIInterfaceOrientationLandscapeRight))
        return YES;
    else
        return NO;
}

其次,在viewDidLoad中,添加以下代码:

if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    UIView *view = [window.subviews objectAtIndex:0];
    [view removeFromSuperview];
    [window addSubview:view];
}

出于某种原因,从主窗口中删除视图然后重新添加它会强制它查询shouldAutorotateToInterfaceOrientation并正确设置方向。鉴于这不是Apple批准的方法,也许人们应该避免使用它,但它适用于我。你的旅费可能会改变。但that SO discussion也指其他技术。