更改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.2 , Xcode 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如下所示:
-
捕获UITabBar的默认高度:
fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }()
-
调整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.0和Swift 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 11和Swift 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 }