我试图将标准的UITabBar高度更改为44px,类似于Tweetbot的选项卡栏高度。我还看到其他一些应用程序也这样做。
然而,当我尝试设置高度时,它仍然保持不变。
self.tabBar.frame.height = 40
我们不能改变选项卡栏的高度吗?如果不行,有没有好的替代方案?可以使用工具栏吗?
我试图将标准的UITabBar高度更改为44px,类似于Tweetbot的选项卡栏高度。我还看到其他一些应用程序也这样做。
然而,当我尝试设置高度时,它仍然保持不变。
self.tabBar.frame.height = 40
我们不能改变选项卡栏的高度吗?如果不行,有没有好的替代方案?可以使用工具栏吗?
看起来每个人都说这不容易做到
在你的故事板中给你的UITabBar一个自定义子类名称,然后使用以下方法实现子类
这告诉所有使用选项卡栏的视图它应该有固定的高度。
@implementation MyTabBar
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 100;
return sizeThatFits;
}
@end
SomeGuy的答案对我有用。这里是Swift的翻译,供需要的人使用。我将高度设置为接近大多数流行应用程序使用的值。
class TabBar: UITabBar {
override func sizeThatFits(size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 38
return sizeThatFits
}
}
适用于Swift 3和Xcode 8
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 80 // adjust your size here
return sizeThatFits
}
}
在Swift中,使用UITabBar的扩展甚至比上面提出的所有解决方案都更简单,无需子类化:
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = <Insert your height here>
return sizeThatFits
}
}
- (void)viewWillLayoutSubviews {
CGRect tabFrame = self.tabBar.frame;
tabFrame.size.height = 80;
tabFrame.origin.y = self.view.frame.size.height - 80;
self.tabBar.frame = tabFrame;
}
class TabBar: UITabBar {
override func intrinsicContentSize() -> CGSize {
var intrinsicSize = super.frame.size
intrinsicSize.height = 120
return intrinsicSize
}
}
如果你使用的是iOS 11,则以下内容可能有所帮助
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 60;
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
sizeThatFits.height += bottomPadding;
}
return sizeThatFits;
}
开发者并不拥有 tabBar,框架拥有。它会与你作斗争,以确保 tabBar 保持相同的高度。如果你想解决这个问题,你可以制作自己的工具栏,并添加自动布局约束来强制其保持任何你想要的高度。
对于iOS11及以上版本,您可以使用以下方法:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (@available(iOS 11.0, *)) {
self.additionalSafeAreaInsets = UIEdgeInsetsMake(0, 0, 20, 0);
}
}
对于所有的操作系统,创建UITabBar子类,在UITabBarController中使用它,并在自定义选项卡栏类的实现中实现以下方法:
-(CGSize)sizeThatFits:(CGSize)size {
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = kBarHeight;
return sizeThatFits;
}
override func intrinsicContentSize() -> CGSize { var sizeThatFits = super.frame.size sizeThatFits.height = 120 return sizeThatFits }
- jernkuan