在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)]; }