在iOS 7中更改UIToolbar的高度

时间:2013-10-05 10:22:45

标签: ios ios7 toolbar uitoolbar

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

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

我查看了“Is there a way to change the height of a UIToolbar?”,但这不起作用。

我尝试了对UIToolbar进行子类化,强制自定义高度并在Storyboard中设置正确的类,但这两者都不起作用,高度保持为44px。

我认为自动布局无法对工具栏的大小设置任何限制,每个字段都被禁用。

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

这是我能做的最好的事:screenshot

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

6 个答案:

答案 0 :(得分:6)

使用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)

答案 1 :(得分:3)

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

let toolbarCustomHeight: CGFloat = 64

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

答案 2 :(得分: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
}

答案 3 :(得分:1)

如果所有屏幕的高度都相同,这应该可以解决问题

extension UIToolbar {
    open override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: UIScreen.main.bounds.width, height: 60)
    }
}

答案 4 :(得分:0)

虽然许多解决方案指向正确的方向,但它们有一些布局问题或无法正常工作。所以,这是我的解决方案:

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
    }
}

答案 5 :(得分:-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)];
}