2013-10-05 54 views
9

我试图在新iOS 7项目中更改我的UIToolbar的高度,但我无法做到。在iOS 7中更改UIToolbar的高度

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

我看着“Is there a way to change the height of a UIToolbar?”,但没有奏效。

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

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

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

这是最好的,我可以这样做:screenshot

它实际上是可能改变UIToolbar的高度的iOS 7? 或者我应该创建一堆自定义项目来模仿它?

回答

-5

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

- (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)]; 
} 
+1

此代码根本不起作用。 – Tander

+0

这段代码只会让你的酒吧(脏的编程风格)变得糟糕,因为你试图从UINavigationController处理自动添加的UIToolbar。如果用户不使用UINavigationController,那么它肯定不起作用。 – Vinh

1

我已经通过继承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 
} 
+0

如果可能请您发布整个子类吗? –

+1

我曾尝试底部工具栏的相同子类。这会增加高度,但将工具栏设置为0,0顶部,左侧。于是我搜索并找到了另一种“约束”方式。我们需要设置高度约束(选择工具栏元素,选择编辑器>引脚>高度创建约束)。我希望这会对其他人有所帮助。 – SHS

+0

你为什么使用self.frame来设置新的矩形?通过修改边界并将新值设置为框架,您将始终将视图置于左上角(0,0)。 – JanApotheker

5

继使用sizeThatFits的@Antoine的建议,这是我的工具栏子与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) 
2

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

let toolbarCustomHeight: CGFloat = 64 

toolbar.heightAnchor.constraintEqualToConstant(toolbarCustomHeight).active = true 
+0

更好的解决方案! – StackUnderflow

0

尽管许多解决方案,在正确的方向指向,它们有一些布局问题或不好好工作。所以,这里是我的解决方案:

斯威夫特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 
    } 
}