2011-03-07 45 views
15

从IOS人机界面指南,iOS UI Element Usage GuidelinesUIToolbar高度上设备旋转

在iPhone上,考虑到在该设备上旋转发生工具栏高度 的 自动变化。特别是,在 中,请确保您的自定义 工具栏图标适合以横向 方向出现的较薄的 栏。请勿以编程方式指定工具栏的高度 。

我能看到的高度从44点改为32点邮件Twitter的iPhone的Dropbox例如,但当我添加工具栏(与界面生成器),并有我的UIViewController子类自动旋转(shouldAutorotateToInterfaceOrientation:返回YES),工具栏在设备旋转时不会自动更改其高度。

UIToolbar Class Reference没有提到高度的这种自动变化,所以我应该以编程方式更改它,即使在HIG说不要指定工具栏编程的高度?

回答

15

正如在评论中所指出的yonel乔治7KV7答案,改变了自动尺寸调整掩码不工作打算在iOS 5

我发现了另一个解决方案通过使用-[UIView sizeThatFits:]方法。这是我如何做的:

- (void) layoutForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Adjust the toolbar height depending on the screen orientation 
    CGSize toolbarSize = [self.toolbar sizeThatFits:self.view.bounds.size]; 
    self.toolbar.frame = (CGRect){CGPointMake(0.f, CGRectGetHeight(self.view.bounds) - toolbarSize.height), toolbarSize}; 
    self.webView.frame = (CGRect){CGPointZero, CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetMinY(self.toolbar.frame))}; 
} 

然后我把这个layoutForInterfaceOrientation:方法在我的视图控制器viewWillAppear:willAnimateRotationToInterfaceOrientation:duration:方法。

尽管如此,程序仍然改变了高度,但至少该值没有硬编码。

19

您是否检查工具栏的自动调整大小的属性?

+11

就是这样,你必须做'toolbar.autoresizingMask = toolbar.autoresizingMask | UIViewAutoresizingFlexibleHeight;'以编程方式作为Interface Builder不允许你改变灵活高度! – 0xced 2011-03-07 12:47:10

+0

如果它帮助你,请接受答案。快乐编码:) – visakh7 2011-03-07 12:49:21

+2

这个解决方案对iOS5.0有没有副作用?它工作正常,但工具栏中的图标始终具有横向(=较小)的大小,即使在纵向上:/ – yonel 2011-12-14 13:45:58

2

如果您在NavigationController中使用ViewController,则可以使用NavigationController的工具栏而不是创建自己的,并让它处理调整大小。实际上,这是ViewController的toolbarItems属性的用途。

+1

我知道这个解决方案,但是当您将视图控制器B推到视图控制器A上时,如果A不需要工具栏和B想要一个工具栏,你不能得到一个不错的*推*水平动画。工具栏动画是垂直的,而推过渡动画是水平的,所以在我看来这看起来很尴尬。没有动画工具栏更糟糕。 – 0xced 2012-08-24 18:44:48

12

这种行为要实现自动布局要简单得多。我只在iOS8上进行测试,但下面的代码对我的作品与方向变化所需的动画:

public override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    toolbar.invalidateIntrinsicContentSize() 
} 
+0

在iOS 9上很好用。 – 2015-06-18 09:55:52

+0

这几乎奏效了,我必须在invalidateIntrinsicContentSize()之后添加toolbar.sizeToFit()。 – C0C0AL0C0 2016-07-03 22:11:56