UIToolbar高度上设备旋转
从IOS人机界面指南,iOS UI Element Usage GuidelinesUIToolbar高度上设备旋转
在iPhone上,考虑到在该设备上旋转发生工具栏高度 的 自动变化。特别是,在 中,请确保您的自定义 工具栏图标适合以横向 方向出现的较薄的 栏。请勿以编程方式指定工具栏的高度 。
我能看到的高度从44点改为32点邮件,Twitter的iPhone和的Dropbox例如,但当我添加工具栏(与界面生成器),并有我的UIViewController子类自动旋转(shouldAutorotateToInterfaceOrientation:
返回YES),工具栏在设备旋转时不会自动更改其高度。
的UIToolbar Class Reference没有提到高度的这种自动变化,所以我应该以编程方式更改它,即使在HIG说不要指定工具栏编程的高度?
正如在评论中所指出的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:
方法。
尽管如此,程序仍然改变了高度,但至少该值没有硬编码。
您是否检查工具栏的自动调整大小的属性?
如果您在NavigationController中使用ViewController,则可以使用NavigationController的工具栏而不是创建自己的,并让它处理调整大小。实际上,这是ViewController的toolbarItems
属性的用途。
我知道这个解决方案,但是当您将视图控制器B推到视图控制器A上时,如果A不需要工具栏和B想要一个工具栏,你不能得到一个不错的*推*水平动画。工具栏动画是垂直的,而推过渡动画是水平的,所以在我看来这看起来很尴尬。没有动画工具栏更糟糕。 – 0xced 2012-08-24 18:44:48
这种行为要实现自动布局要简单得多。我只在iOS8上进行测试,但下面的代码对我的作品与方向变化所需的动画:
public override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
toolbar.invalidateIntrinsicContentSize()
}
在iOS 9上很好用。 – 2015-06-18 09:55:52
这几乎奏效了,我必须在invalidateIntrinsicContentSize()之后添加toolbar.sizeToFit()。 – C0C0AL0C0 2016-07-03 22:11:56
就是这样,你必须做'toolbar.autoresizingMask = toolbar.autoresizingMask | UIViewAutoresizingFlexibleHeight;'以编程方式作为Interface Builder不允许你改变灵活高度! – 0xced 2011-03-07 12:47:10
如果它帮助你,请接受答案。快乐编码:) – visakh7 2011-03-07 12:49:21
这个解决方案对iOS5.0有没有副作用?它工作正常,但工具栏中的图标始终具有横向(=较小)的大小,即使在纵向上:/ – yonel 2011-12-14 13:45:58