更改UITabBar高度

我使用UITabBarController作为根视图,应用程序支持iOS 6及以上版本。 项目类层次如下。

 UITabBarController - tab1 - UINavigationController - UIViewController - UIViewController . . - tab2 - UINavigationController - UIViewController - UIViewController . . . - tab3 - UIViewController - tab4 - UIViewController 

我使用下面的代码来更改上面的层次结构中UIViewControllers(位于UINavigationController )之一的UITabBar高度。

 CGRect tabbarFrame = self.tabBarController.tabBar.frame; tabbarFrame.size.height += 60; self.tabBarController.tabBar.frame = tabbarFrame; 

但它不改变高度。 UITabBar以默认高度显示。 虽然logging它的值打印更改值如下所示。

 <UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>> 

我如何改变UITabBar的高度?

更新:根据HSD_Coder的高度不能改变。 那么如何显示下面的标签? 图标的高度大于宽度。 甚至有可能使用UITabBar

在这里输入图像说明

标签栏的高度是由苹果公司设置的一个常数,所以你不能改变它。

我面临这个问题,我能够解决这个问题。

您必须将以下代码添加到您的UITabBarController类的子类。

 const CGFloat kBarHeight = 80; - (void)viewWillLayoutSubviews { CGRect tabFrame = self.tabBar.frame; //self.TabBar is IBOutlet of your TabBar tabFrame.size.height = kBarHeight; tabFrame.origin.y = self.view.frame.size.height - kBarHeight; self.tabBar.frame = tabFrame; } 

对于iOS 8.2Xcode 6.2 Swift语言:

为您的UITabBarController (types为UITabBarController )创build一个“DNMainTabVC.swift”(DeveloperNameMainTabViewController.swift文件)并将其连接到您的故事板VC。

添加以下行:

 override func viewWillLayoutSubviews() { var tabFrame = self.tabBar.frame // - 40 is editable , the default value is 49 px, below lowers the tabbar and above increases the tab bar size tabFrame.size.height = 40 tabFrame.origin.y = self.view.frame.size.height - 40 self.tabBar.frame = tabFrame } 

这对我有效。

创build一个types为UITabBar的自定义子类,然后实现以下方法:

 @implementation CustomTabBar #define kTabBarHeight = // Input the height we want to set for Tabbar here -(CGSize)sizeThatFits:(CGSize)size { CGSize sizeThatFits = [super sizeThatFits:size]; sizeThatFits.height = kTabBarHeight; return sizeThatFits; } @end 

希望这会工作。

Swift3.0,Swift 4.0兼容

Pre-iPhone X默认标签栏高度: 49pt

iPhone X的默认标签栏高度: 83pt

支持包括iPhone X屏幕尺寸在内的所有iOS设备的通用解决scheme如下所示:

  1. 捕获UITabBar的默认高度:

     fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }() 
  2. 调整UITabBar的高度:

      override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() let newTabBarHeight = defaultTabBarHeight + 16.0 var newFrame = tabBar.frame newFrame.size.height = newTabBarHeight newFrame.origin.y = view.frame.size.height - newTabBarHeight tabBar.frame = newFrame } 

Swift 2.0:

 var tabBar:UITabBar? override func viewWillLayoutSubviews() { var tabFrame: CGRect = self.tabBar!.frame tabFrame.size.height = 60 tabFrame.origin.y = self.view.frame.size.height - 60 self.tabBar!.frame = tabFrame } 

XCode 9.0Swift 4中testing

正如在以前的答案中所build议的 – inheritanceUITabBar并覆盖sizeThatFits ,但将height标记为@IBInspectable ,因此可以在Interface Builder中进行设置:

 import UIKit class CustomTabBar : UITabBar { @IBInspectable var height: CGFloat = 0.0 override func sizeThatFits(_ size: CGSize) -> CGSize { var sizeThatFits = super.sizeThatFits(size) if height > 0.0 { sizeThatFits.height = height } return sizeThatFits } } 

Identity Inspector (⌥⌘3)中为UITabBar设置CustomTabBar类:

标签栏标识检查器

然后在属性检查器 (⌥⌘4)中设置所需的Height (大于0.0 ):

标签栏属性检查器

build立在以前的答案和更新Swift 3。

子类UITabController并确保将您的新自定义类分配给您的UITabController的标识检查器。

Swift 3.0

 class MainTabBarController: UITabBarController { override func viewWillLayoutSubviews() { var newTabBarFrame = tabBar.frame let newTabBarHeight: CGFloat = 60 newTabBarFrame.size.height = newTabBarHeight newTabBarFrame.origin.y = self.view.frame.size.height - newTabBarHeight tabBar.frame = newTabBarFrame } } 

警告 :如果你的标签栏下面有一个空白的空间,确保你把这个代码放在viewWillLayoutSubviews()而不是viewDidLoad()中。

Xamarin执行:

 public override void ViewWillLayoutSubviews() { base.ViewWillLayoutSubviews(); const float newTabBarHeight = 40f; TabBar.Frame = new CGRect(TabBar.Frame.X, TabBar.Frame.Y + (TabBar.Frame.Height - newTabBarHeight), TabBar.Frame.Width, newTabBarHeight); } 

Swift 3.0+在下面的代码中将200replace为所需的高度。

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

您可以通过子类化来修改标签栏的高度。 我其实很久以前也这么做过 xcode 6.0

 class MyTabBar: UITabBar { override func sizeThatFits(size: CGSize) -> CGSize { let sizeThatFits = super.sizeThatFits(size) return CGSize(width: sizeThatFits.width, height: 60) } } 

这应该返回其默认宽度与60pts的高度。

出于某种原因,@Rushikesh的答案在iOS 10之前工作得很好,但是我在iOS 11Swift 3.2中遇到了一些问题。

每当我触摸一个新的标签tabBar改变其框架。

我通过将代码放入viewDidLayoutSubviews()函数而不是viewWillLayoutSubviews()

Swift 3:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() var tabFrame = tabBar.frame tabFrame.size.height = 65 tabFrame.origin.y = view.frame.size.height - 65 tabBar.frame = tabFrame }