我正在尝试将股票UITabBar的高度更改为44px,类似于Tweetbot的标签栏高度。我也看到其他一些应用程序也这样做了。
但是,当我尝试设置高度时,它仍然保持不变
self.tabBar.frame.height = 40
我们不允许更改标签栏高度吗?如果是的话,什么是好的选择呢?使用工具栏?
答案 0 :(得分:37)
似乎每个人都说这不能轻易完成
在你的故事板中给你的UITabBar一个自定义的子类名,然后使用以下
实现子类这告诉所有使用标签栏的视图应该是一定的高度。
@implementation MyTabBar
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 100;
return sizeThatFits;
}
@end
答案 1 :(得分:31)
上面的某些回答对我有用。这里是可能需要它的任何人的Swift翻译。我的高度接近最受欢迎的应用程序使用的高度。
class TabBar: UITabBar {
override func sizeThatFits(size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 38
return sizeThatFits
}
}
答案 2 :(得分:11)
适用于Swift 3和xcode 8
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 80 // adjust your size here
return sizeThatFits
}
}
答案 3 :(得分:6)
在你的UITabBarController
中- (void)viewWillLayoutSubviews {
CGRect tabFrame = self.tabBar.frame;
tabFrame.size.height = 80;
tabFrame.origin.y = self.view.frame.size.height - 80;
self.tabBar.frame = tabFrame;
}
答案 4 :(得分:5)
如果启用了自动布局,则需要覆盖instrinsicContentSize而不是
Proper usage of intrinsicContentSize and sizeThatFits: on UIView Subclass with autolayout
class TabBar: UITabBar {
override func intrinsicContentSize() -> CGSize {
var intrinsicSize = super.frame.size
intrinsicSize.height = 120
return intrinsicSize
}
}
答案 5 :(得分:5)
在swift中,它比上面提到的所有解决方案都更简单,使用了对UITabBar的扩展,没有必要的子类化:
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = <Insert your height here>
return sizeThatFits
}
}
答案 6 :(得分:1)
开发人员并不拥有tabBar,框架也是如此。它会打击你,以确保tabBar保持相同的高度。如果你想解决这个问题,你可以制作自己的工具栏并在其高度上添加自动布局约束,以强制它保持你喜欢的任何高度。
答案 7 :(得分:1)
如果您使用的是iOS 11,那么以下内容将有所帮助
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 60;
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
sizeThatFits.height += bottomPadding;
}
return sizeThatFits;
}
基本上需要覆盖安全区域,否则iPhone X上的标签栏高度似乎很低。