Modifier la hauteur UITabBar
J'utilise UITabBarController
comme vue racine et l'application prend en charge iOS 6 et supérieur. La hiérarchie des classes de projet est la suivante.
UITabBarController
- tab1
- UINavigationController
- UIViewController
- UIViewController
.
.
- tab2
- UINavigationController
- UIViewController
- UIViewController
.
.
.
- tab3
- UIViewController
- tab4
- UIViewController
J'ai utilisé le code ci-dessous pour changer la hauteur de UITabBar
dans L'un des UIViewControllers (qui est à l'intérieur de UINavigationController
) dans la hiérarchie ci-dessus.
CGRect tabbarFrame = self.tabBarController.tabBar.frame;
tabbarFrame.size.height += 60;
self.tabBarController.tabBar.frame = tabbarFrame;
Mais cela ne change pas la hauteur. UITabBar
est affiché avec la hauteur par défaut. Bien que la journalisation de sa valeur imprime la valeur modifiée comme indiqué ci-dessous.
<UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>>
Comment puis-je changer la hauteur de UITabBar
pour obtenir quelque chose comme ce:?
15 réponses
La hauteur de la barre d'onglets est une constante définie par Apple, vous ne pouvez donc pas la modifier.
J'ai fait face à ce problème et j'ai pu le résoudre.
Vous devez ajouter le code suivant à votre sous-classe de UITabBarController
classe.
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;
}
Pour iOS 8.2, Xcode 6.2 Swift langue:
Créer un " DNMainTabVC.swift" (DeveloperNameMainTabViewController.fichier swift) pour votre UITabBarController
(de type UITabBarController
) et connectez-le à votre storyboard VC.
Ajouter les lignes suivantes:
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
}
Cela a fonctionné pour moi.
Swift3. 0, Swift 4.0 compatible
Pré-iPhone x hauteur de la barre d'onglets par défaut: 49pt
IPhone x hauteur de la barre d'onglets par défaut: 83pt
Une solution universelle prenant en charge tous les appareils iOS, y compris la taille de l'écran iPhone x ressemblerait à ceci:
-
Capture la hauteur par défaut de UITabBar:
fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }()
-
Ajuster la hauteur de 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 }
Créez une sous-classe personnalisée de type UITabBar
, puis implémentez la méthode suivante:
@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
J'espère que cela fonctionnera.
Testé dans XCode 9.0 et Swift 4
Comme suggéré dans les réponses précédentes-hériter UITabBar
et remplacer sizeThatFits
, mais marquer height
comme @IBInspectable
, de sorte qu'il pourrait être défini dans le Générateur D'Interface :
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
}
}
Définissez la classe CustomTabBar
pour le UITabBar
dans l'Inspecteur D'identité (⌥⌘3):
Définissez ensuite Height
souhaité (supérieur à 0.0
) dans l'Inspecteur attributs (⌥⌘4):
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
}
Pour 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
}
}
Construire sur les réponses précédentes et mettre à jour pour Swift 3.
Sous-classe UITabController et assurez-vous d'affecter votre nouvelle classe personnalisée à L'Inspecteur D'identité de votre 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
}
}
avertissement: Si vous obtenez un espace vide sous votre barre d'onglets, assurez-vous d'avoir mis ce code dans viewWillLayoutSubviews() et non viewDidLoad().
Implémentation 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 + remplacez 200 à la hauteur désirée dans le code ci-dessous.
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 200)
}
}
Vous pouvez modifier la hauteur de la barre d'onglets en la sous-classant. J'ai fait cela il y a longtemps. xcode 6.0
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: super.sizeThatFits(size).width, height: 60)
}
Qui devrait renvoyer sa largeur par défaut avec la hauteur de 60pts.
, Pour quelque raison, la réponse de @Rushikesh fonctionnait plutôt bien jusqu'à ce que iOS 10, mais j'ai eu quelques problèmes avec iOS 11 et Swift 3.2.
La barre d'onglets changeait son cadre chaque fois que je touchais un nouvel onglet.
J'ai corrigé cela en mettant le code dans la fonction viewDidLayoutSubviews()
au lieu de 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
}
C'est aussi une façon de le faire
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 71
return sizeThatFits
} }
IPhoneX ont une hauteur différente, donc si nous passons à une hauteur plus petite, la forme de la barre d'onglets sera mauvaise dans 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;
}
}