Gee*_*eek 61 height objective-c uitabbarcontroller uitabbar ios
我UITabBarController
用作root视图,app支持iOS 6及更高版本.项目类层次结构如下.
UITabBarController
- tab1
- UINavigationController
- UIViewController
- UIViewController
.
.
- tab2
- UINavigationController
- UIViewController
- UIViewController
.
.
.
- tab3
- UIViewController
- tab4
- UIViewController
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码来改变上面层次结构UITabBar
中的一个UIViewControllers(在里面UINavigationController
)的高度.
CGRect tabbarFrame = self.tabBarController.tabBar.frame;
tabbarFrame.size.height += 60;
self.tabBarController.tabBar.frame = tabbarFrame;
Run Code Online (Sandbox Code Playgroud)
但它没有改变高度.UITabBar
以默认高度显示.虽然记录其值打印更改值,如下所示.
<UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>>
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变UITabBar
高度来达到这样的目的:?
小智 130
我遇到了这个问题,我能够解决它.
您必须将以下代码添加到类的子UITabBarController
类中.
const CGFloat kBarHeight = 80;
- (void)viewWillLayoutSubviews {
[super 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;
}
Run Code Online (Sandbox Code Playgroud)
MB_*_*per 41
对于iOS 8.2,Xcode 6.2 Swift语言:
为您的UITabBarController
(类型UITabBarController
)创建"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
}
Run Code Online (Sandbox Code Playgroud)
这对我有用.
Kia*_*sar 34
Swift3.0,兼容Swift 4.0
Pre-iPhone X默认标签栏高度:49pt
iPhone X默认标签栏高度:83pt
支持每个iOS设备(包括iPhone X屏幕尺寸)的通用解决方案如下所示:
捕获UITabBar的默认高度:
fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }()
Run Code Online (Sandbox Code Playgroud)调整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
}
Run Code Online (Sandbox Code Playgroud)sil*_*eep 29
创建类型的自定义子类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
Run Code Online (Sandbox Code Playgroud)
希望这会奏效.
msr*_*jan 28
在XCode 9.0和Swift 4中测试过
正如之前的答案中所建议的那样 - 继承UITabBar
和覆盖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
}
}
Run Code Online (Sandbox Code Playgroud)
在Identity Inspector中设置CustomTabBar
类(⌥⌘3):UITabBar
然后在Attributes Inspector(⌥⌘4)中设置所需Height
(大于):0.0
Ram*_*ami 13
对于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
}
}
Run Code Online (Sandbox Code Playgroud)
A.G*_*A.G 11
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
}
Run Code Online (Sandbox Code Playgroud)
Swift 3.0+在下面的代码中将200替换为您想要的高度.
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 200)
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 4&与iPhone X兼容
class CustomTabBar : UITabBar {
@IBInspectable var height: CGFloat = 65.0
override open func sizeThatFits(_ size: CGSize) -> CGSize {
guard let window = UIApplication.shared.keyWindow else {
return super.sizeThatFits(size)
}
var sizeThatFits = super.sizeThatFits(size)
if height > 0.0 {
if #available(iOS 11.0, *) {
sizeThatFits.height = height + window.safeAreaInsets.bottom
} else {
sizeThatFits.height = height
}
}
return sizeThatFits
}
}
Run Code Online (Sandbox Code Playgroud)
构建以前的答案并更新Swift 3.
子类UITabController并确保将新的自定义类分配给UITabController的Identity Inspector.
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
}
}
Run Code Online (Sandbox Code Playgroud)
警告:如果在标签栏下面有空格,请确保将此代码放在viewWillLayoutSubviews()而不是viewDidLoad()中.
小智 6
出于某种原因,@Rushikesh的答案在iOS 10之前运行良好,但是我在iOS 11和Swift 3.2上遇到了一些问题。
每次我触摸新标签页时,tabBar都会更改其框架。
我通过将代码放在viewDidLayoutSubviews()
函数中而不是viewWillLayoutSubviews()
迅捷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
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
这也是做到这一点的一种方法
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 71 // or whatever height you need
return sizeThatFits
}
}
Run Code Online (Sandbox Code Playgroud)
使用安全区域编辑 Kiarash Asar 的答案:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
var safeAreaBottomInset: CGFloat = 0.0
if #available(iOS 11.0, *) {
safeAreaBottomInset = view.safeAreaInsets.bottom
}
let newTabBarHeight: CGFloat = {{myDesiredHeight}} + safeAreaBottomInset
var newFrame = tabBar.frame
newFrame.size.height = newTabBarHeight
newFrame.origin.y = view.frame.size.height - newTabBarHeight
tabBar.frame = newFrame
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
69111 次 |
最近记录: |