可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I use UITabBarController
as a root view and app supports iOS 6 and above. Project class hierarchy is as below.
UITabBarController
- tab1
- UINavigationController
- UIViewController
- UIViewController
.
.
- tab2
- UINavigationController
- UIViewController
- UIViewController
.
.
.
- tab3
- UIViewController
- tab4
- UIViewController
I used below code to change height of UITabBar
in one of the UIViewControllers (which is inside UINavigationController
) in above hierarchy.
CGRect tabbarFrame = self.tabBarController.tabBar.frame;
tabbarFrame.size.height += 60;
self.tabBarController.tabBar.frame = tabbarFrame;
But its not changing the height. UITabBar
is displayed with default height. Though logging its value prints changed value as shown below.
<UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>>
How can I change UITabBar
's height to achieve something like this:?
回答1:
The height of the tab bar is a constant set by Apple so you can't change it.
回答2:
I faced this issue and I was able to solve it.
You have to add following code to your subclass of UITabBarController
class.
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;
}
回答3:
For iOS 8.2, Xcode 6.2 Swift language:
Create a "DNMainTabVC.swift" (DeveloperNameMainTabViewController.swift file) for your UITabBarController
(of type UITabBarController
) and connect it to your storyboard VC.
Add the following lines:
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
}
This worked for me.
回答4:
Swift3.0, Swift 4.0 compatible
Pre-iPhone X default tab bar height: 49pt
iPhone X default tab bar height: 83pt
A universal solution supporting every iOS device including iPhone X screen size would look like this:
Capture UITabBar's default height:
fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }()
Adjust UITabBar's height:
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
}
回答5:
Create a custom subclass of type UITabBar
, then implement the following method :
@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
Hope this will work.
回答6:
Tested in XCode 9.0 and Swift 4
As suggested in previous answers - inherit UITabBar
and override sizeThatFits
, but mark height
as @IBInspectable
, so it could be set in the 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
}
}
Set CustomTabBar
class for the UITabBar
in the Identity Inspector (⌥⌘3):
Then set desired Height
(greater than 0.0
) in the Attributes Inspector (⌥⌘4):
回答7:
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
}
回答8:
Building up on previous answers and updating for Swift 3.
Subclass UITabController and make sure to assign your new custom class to the Identity Inspector of your 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
}
}
Warning: if you get a blank space below your tab bar, make sure you did put this code in viewWillLayoutSubviews() and not viewDidLoad().
回答9:
Swift 3.0+ Replace 200 to your desired height in below code.
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 200)
}
}
回答10:
For Swift 4
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 60 // adjust your size here
return sizeThatFits
}
}
回答11:
Xamarin implementation:
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);
}
回答12:
For some reason, the answer from @Rushikesh was working pretty well until iOS 10 but I had some issues with iOS 11 and Swift 3.2.
The tabBar was changing its frame every time I touched a new tab.
I fixed this by putting the code in the viewDidLayoutSubviews()
function instead of 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
}
回答13:
You can modify the tab bar's height by subclassing it. I actually did this long time ago. xcode 6.0
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: super.sizeThatFits(size).width, height: 60)
}
That should return its default width with the height of 60pts.
回答14:
this is also one way to do that
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 71
return sizeThatFits
} }
回答15:
iPhoneX have have different height so if we move to smaller height then tabbar shape will be bad in iPhoneX
- (void)viewWillLayoutSubviews
{
int requiredHeight = 55;
CGRect tabFrame = self.tabBar.frame;
if (tabFrame.size.height < requiredHeight)
{
tabFrame.size.height = requiredHeight;
tabFrame.origin.y = self.view.frame.size.height - requiredHeight;
self.tabBar.frame = tabFrame;
}
}