2011-06-16 302 views
2

我有一个自定义的UIToolBar,当我旋转到横向模式时,它不调整它的高度以匹配屏幕顶部的导航栏。高度保持不变,这看起来有点奇怪。 UINavigationController中的默认工具栏在旋转到横向时实际上会缩小尺寸(不幸的是,由于推/跳过渡问题,我无法使用它)。目前的调整大小面具是:自动调整横向UIToolbar的高度

[ customToolbar setAutoresizingMask: (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin) ]; 

如果我添加“UIViewAutoresizingFlexible 高度”奇怪的事情发生......所以我不能肯定我是否应该用这个。

请让我知道是否有人知道自动调整大小/旋转UIToolBar以匹配导航栏高度的正确方法。

回答

5

如果需要使用相同的宽高比为标准的导航栏,你应该实现willAnimateRotationToInterfaceOrientation控制器方法是这样来调整您的自定义工具栏:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    CGRect navigationToolbarFrame = self.navigationController.navigationBar.frame; 
    CGRect customToolbarFrame = CGRectOffset(navigationToolbarFrame, 0.0, navigationToolbarFrame.size.height); 
    [UIView animateWithDuration:duration animations:^{ 
     self.customToolbar.frame = customToolbarFrame;  
    }]; 
} 
+0

动画非常漂亮。 – 2012-01-04 20:44:43

+0

关于voromax答案,当我实现了这些代码行时,当旋转到横向模式时,我的工具栏在中间结束。我如何将它转移到底部?有人知道吗? (我不能评论他的答案下的某些原因) – Masterminder 2012-07-25 14:55:00

+1

@Masterminder如果你想在底部有工具栏,为什么你不使用标准的UINavigationController'工具栏?在你的情况下,我可以假设你禁用了导航栏。因此,此方法无法在旋转期间解析工具栏的框架 – voromax 2012-07-27 11:56:49

1

,以实现最简单的方法是创建一个UINavigationcontroller并将其显示为模态的视图,我用的是这样的:

NewViewController *f = [[NewViewController alloc]initWithNibName:@"NewView" 
              bundle:[NSBundle mainBundle]]; 
self.newViewController = f; 

[f release]; 

UINavigationController *navigationController = [[UINavigationController alloc] 
          initWithRootViewController:self.newViewController]; 

[self presentModalViewController:navigationController animated:YES]; 

既然你呈现视图,您可以使用一个navigatiocontroller工具栏属性。

+0

嗯,我想我需要澄清我的问题。我有两个视图控制器,都是导航控制器的一部分。当我推第二个视图控制器时,我希望有一个工具栏,而不是第一个。当我使用默认导航控制器ToolBar时,转换真的很难看(黑色方块可见)。所以我创建了一个自定义工具栏,添加到第二个视图控制器的视图中。这种方式在转换期间保持“附着”在屏幕上。剩下的唯一东西就是让我的自定义工具栏旋转并在横向模式下正确调整高度。可以用面具解决吗? – Ivo 2011-06-16 20:46:44

0

不确定有关蒙版,但可以在-willRotateToInterfaceOrientation:duration:中调整视图的大小。只需更改框架以满足您的需求。你也可以做到这一点在-willAnimateRotationToInterfaceOrientation:时间: