在iOS 7中更改UIToolbar的高度

我试图改变我的UIToolbar在一个新的iOS 7项目的高度,但我无法。

我正在使用UINavigationController来pipe理几个UIViewController。 我试图通过导航控制器设置工具栏的框架,但唉,工具栏属性是只读的。

我看了一下“ 有没有办法改变UIToolbar的高度? ”,但没有奏效。

我试图UIToolbar子类,强制自定义高度,并在故事板中设置正确的类,但也没有工作,高度保持为44px。

我以为自动布局不能对工具栏的大小设置任何约束,每个字段都是禁用的。

我可以在一个比工具栏更高的UIBarButtonItem中设置自定义视图。 大项目将被正确渲染,但会从工具栏溢出。

这是我能做的最好的: 截图

实际上是否可以在iOS 7中更改UIToolbar的高度? 或者我应该创build一堆自定义项目来模仿它?

遵循@Antoinebuild议使用sizeThatFits ,这里是我的工具栏子类的高度为64:

 import UIKit class Toolbar: UIToolbar { override func layoutSubviews() { super.layoutSubviews() frame.size.height = 64 } override func sizeThatFits(size: CGSize) -> CGSize { var size = super.sizeThatFits(size) size.height = 64 return size } } 

然后,当初始化导航控制器,我说它应该使用该类:

 let navigationController = UINavigationController(navigationBarClass: nil, toolbarClass: Toolbar.self) 

我发现设置工具栏高度最简单的方法是使用高度约束,如下所示:

 let toolbarCustomHeight: CGFloat = 64 toolbar.heightAnchor.constraintEqualToConstant(toolbarCustomHeight).active = true 

我已经通过UIToolbar并粘贴以下代码解决了这个问题:

 override func layoutSubviews() { super.layoutSubviews() var frame = self.bounds frame.size.height = 52 self.frame = frame } override func sizeThatFits(size: CGSize) -> CGSize { var size = super.sizeThatFits(size) size.height = 52 return size } 

尽pipe许多解决scheme都指向正确的方向,但是它们有一些布局问题或者不能正常工作。 所以,这是我的解决scheme:

Swift 3,自定义的UIToolbar子类

 class Toolbar: UIToolbar { let height: CGFloat = 64 override func layoutSubviews() { super.layoutSubviews() var newBounds = self.bounds newBounds.size.height = height self.bounds = newBounds } override func sizeThatFits(_ size: CGSize) -> CGSize { var size = super.sizeThatFits(size) size.height = height return size } } 

您可以使用以下代码在iOS 7中自定义UIToolbar的高度。 我已经testing过,并在当前的项目中工作。

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Make the Toolbar visible with this line OR check the "Shows Toolbar" option of your Navigation Controller in the Storyboard [self.navigationController setToolbarHidden:NO]; CGFloat customToolbarHeight = 60; [self.navigationController.toolbar setFrame:CGRectMake(0, self.view.frame.size.height - customToolbarHeight, self.view.frame.size.width, customToolbarHeight)]; }