9

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

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

我看了看“有没有办法改变 UIToolbar 的高度? ”但这没有用。

我尝试子类化 UIToolbar,强制自定义高度并在情节提要中设置正确的类,但这也没有用,高度一直是 44px。

我想过自动布局无法对工具栏的大小设置任何约束,每个字段都被禁用。

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

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

在 iOS 7 中真的可以改变 UIToolbar 的高度吗?还是我应该创建一堆自定义项目来模仿它?

4

6 回答 6

6

遵循@Antoine 的建议sizeThatFits,这里是我的 Toolbar 子类,高度为 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)
于 2015-11-30T16:08:55.497 回答
3

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

let toolbarCustomHeight: CGFloat = 64

toolbar.heightAnchor.constraintEqualToConstant(toolbarCustomHeight).active = true
于 2016-07-19T21:03:19.340 回答
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
}
于 2015-05-08T12:25:14.450 回答
1

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

extension UIToolbar {
    open override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: UIScreen.main.bounds.width, height: 60)
    }
}
于 2019-07-30T02:46:32.030 回答
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
    }
}
于 2017-08-10T04:15:41.763 回答
-5

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

- (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)];
}
于 2014-01-14T03:11:20.330 回答