改变iOS7/8中UITabBar的高度?

325*_*523 18 uitabbarcontroller uitabbar

我试图将股票UITabBar的高度更改为44px,类似于Tweetbot的标签栏高度.我也看到其他一些应用程序也这样做了.

但是,当我尝试设置高度时,它仍然保持不变

self.tabBar.frame.height = 40
Run Code Online (Sandbox Code Playgroud)

我们不允许更改标签栏高度吗?如果有的话,什么是好的选择呢?使用工具栏?

Som*_*Guy 37

似乎每个人都说这不容易做到

在您的故事板中为UITabBar提供自定义子类名称,然后使用以下内容实现子类

这告诉所有使用标签栏的视图应该是一定的高度.

@implementation MyTabBar

-(CGSize)sizeThatFits:(CGSize)size
{
    CGSize sizeThatFits = [super sizeThatFits:size];
    sizeThatFits.height = 100;

    return sizeThatFits;
}

@end
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Cla*_*ble 32

SomeGuy的上述答案对我有用.这是可能需要它的任何人的Swift翻译.我的高度接近它似乎最受欢迎的应用程序使用的高度.

class TabBar: UITabBar {

     override func sizeThatFits(size: CGSize) -> CGSize {
         var sizeThatFits = super.sizeThatFits(size)
         sizeThatFits.height = 38

         return sizeThatFits
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 创建一个简单的扩展名不需要子类化 (3认同)
  • 如果您支持iPhone X和iPad,则不再有效. (2认同)

Mus*_*ari 11

对于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
    }
 }
Run Code Online (Sandbox Code Playgroud)


jos*_*405 6

在你的UITabBarController中

- (void)viewWillLayoutSubviews {
    CGRect tabFrame = self.tabBar.frame;
    tabFrame.size.height = 80;
    tabFrame.origin.y = self.view.frame.size.height - 80;
    self.tabBar.frame = tabFrame; 
}
Run Code Online (Sandbox Code Playgroud)


der*_*ael 6

在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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这确实很有用,但UITabBar项目不会相应地重新调整大小.如何才能做到这一点? (3认同)
  • 扩展不应用于覆盖功能。这是未定义的行为。 (3认同)

jer*_*uan 5

如果启用了自动布局,则需要替代instrinsicContentSize

在具有自动布局的UIView子类上正确使用internalContentSize和sizeThatFits:

class TabBar: UITabBar {
    override func intrinsicContentSize() -> CGSize {
        var intrinsicSize = super.frame.size

        intrinsicSize.height = 120
        return intrinsicSize
     }
}
Run Code Online (Sandbox Code Playgroud)