Подтвердить что ты не робот

Изменение высоты UITabBar в iOS7/8?

Я пытаюсь изменить высоту запаса UITabBar до 44px, как и высота строки вкладки Tweetbot. Я также видел, что некоторые другие приложения тоже делают это.

однако, когда я пытаюсь установить высоту, он все равно остается тем же

self.tabBar.frame.height = 40

нам не разрешено изменять высоту панели вкладок? и если да, то какая хорошая альтернатива? используя панель инструментов?

4b9b3361

Ответ 1

Ответ SomeGuy выше работал у меня. Здесь Swift перевод для тех, кто может понадобиться. Я сделал высоту близкой к тому, что, по-видимому, использует большинство популярных приложений.

class TabBar: UITabBar {

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

         return sizeThatFits
     }
}

Ответ 2

Кажется, все говорят, что это нелегко сделать.

В своем раскадровке дайте UITabBar собственное имя подкласса, затем выполните подкласс со следующими

Это указывает всем представлениям, которые используют панель вкладок, чтобы она была определенной высотой.

@implementation MyTabBar

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

    return sizeThatFits;
}

@end

enter image description here

Ответ 3

Для 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
    }
 }

Ответ 4

В вашем 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; 
}

Ответ 5

В быстром он даже проще, чем все предлагаемые выше решения, используя расширения для 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
    }
}

Ответ 7

Разработчик не владеет tabBar, это делает фреймворк. Он будет бороться с вами, чтобы убедиться, что tabBar остается одинаковой высоты. Если вы хотите обойти это, вы можете создать свою собственную панель инструментов и добавить ограничения autlayout на ее высоту, чтобы заставить ее оставаться на любой высоте, которую вы хотели бы.

Ответ 8

Если вы находитесь на 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;
}

В принципе, нужно покрывать безопасную область, иначе высота закладки на iPhone X оказывается низкой.