在iOS 7中更改UIToolbar的高度
我试图在新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? 或者我应该创建一堆自定义项目来模仿它?
您可以使用以下代码在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)];
}
我已经通过继承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,0顶部,左侧。于是我搜索并找到了另一种“约束”方式。我们需要设置高度约束(选择工具栏元素,选择编辑器>引脚>高度创建约束)。我希望这会对其他人有所帮助。 – SHS
你为什么使用self.frame来设置新的矩形?通过修改边界并将新值设置为框架,您将始终将视图置于左上角(0,0)。 – JanApotheker
继使用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)
我发现设置工具栏高度的最简单方法是使用一个高度约束如下:
let toolbarCustomHeight: CGFloat = 64
toolbar.heightAnchor.constraintEqualToConstant(toolbarCustomHeight).active = true
更好的解决方案! – StackUnderflow
尽管许多解决方案,在正确的方向指向,它们有一些布局问题或不好好工作。所以,这里是我的解决方案:
斯威夫特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
}
}
此代码根本不起作用。 – Tander
这段代码只会让你的酒吧(脏的编程风格)变得糟糕,因为你试图从UINavigationController处理自动添加的UIToolbar。如果用户不使用UINavigationController,那么它肯定不起作用。 – Vinh