Как переместить заголовок UITabBarItem?

Может кто-нибудь сказать мне, пожалуйста, как я могу переместить заголовок UITabBarItem, например, на 2 пикселя вверх?


person iWizard    schedule 04.05.2012    source источник


Ответы (5)


Решение:

UITabBarItem *item = [tabBar.items objectAtIndex:0]; 
item.titlePositionAdjustment = UIOffsetMake(0, -5.0);
person iWizard    schedule 10.03.2013
comment
Удивительно быстро: item.setTitlePositionAdjustment(UIOffsetMake(0, -5.0)) (в XCode 6.1 доступна только функция установки) - person average Joe; 22.01.2015
comment
В Swift2/Xcode7 функция установки отсутствует, и вы можете использовать обычное свойство для установки значения. item.titlePositionAdjustment = UIOffset(horizontal:0,vertical:1000) - person Philipp Otto; 21.09.2015

Обновление для Свифт 3

Поместите этот код внутри UITabBarController:

UITabBarItem.appearance().titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -5)

Кредит принадлежит Тиму Брауну < /а>

person Ibrahim    schedule 15.02.2017

Swift 4 Как и я, если вы создаете контроллер панели вкладок внутри какого-либо другого контроллера сразу после добавления всего контроллера, вы можете просмотреть элементы панели вкладок и изменить заголовок, положение и шрифт.

for (index,tabBarItem) in tabBarController.tabBar.items!.enumerated() {
        tabBarItem.image = nil //if you only want title and no Image
        tabBarItem.title = titleArray[index] //setting your title based on some array
        let attributes = [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 20)] // changeing font and height of the text
        tabBarItem.setTitleTextAttributes(attributes, for: .normal)
        tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -10.0) // updating the title positon 
    } 
person Iraniya Naynesh    schedule 24.03.2018

Вы можете использовать tabbarItem.titlePositionAdjustment для настройки.

Если вы хотите сделать с этим гораздо больше, откройте подвид tabbaritem и найдите ярлык на tabbar.subviews. Например

 int i = 0;
for (NSObject *view in self.tabBar.subviews)
{
    MTLog(@"%@", view);
    if ([view respondsToSelector:@selector(subviews)])
    {
        for (NSObject *childView in ((UIView *)view).subviews)
        {
            if ([childView isKindOfClass:[UILabel class]])
            {
                if (i > (titlesArray.count - 1))
                    break;
                UILabel *label = (UILabel *)childView;
                NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:titlesArray[i] attributes:@{
                                                                                                                                            NSFontAttributeName:[UIFont systemFontOfSize:9]
                                                                                                                                            }];

                NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
                [style setMinimumLineHeight:26];
                [style setAlignment:NSTextAlignmentRight];

                [attributedString addAttribute:NSParagraphStyleAttributeName
                                         value:style
                                         range:NSMakeRange(0, attributedString.length)];
                label.attributedText = attributedString;
                i++;
            }

        }
    }


}
person Abeer Iqbal    schedule 09.11.2017

Вы не можете... вы можете обойти это, но это будет непросто и может сломать ваше приложение при будущих обновлениях iOS.

Лучше всего было бы создать свою собственную систему UITabBar... вот хорошее руководство, на которое вы могли бы взглянуть.

http://idevrecipes.com/2011/01/04/how-does-the-twitter-iphone-app-implement-a-custom-tab-bar/

person liamnichols    schedule 04.05.2012
comment
Я нашел это решение: UITabBarItem *item = [tabBar.items objectAtIndex:0]; item.titlePositionAdjustment = UIOffsetMake(0, -5.0); - person iWizard; 04.05.2012
comment
Ааа... извините, в прошлый раз, когда я искал эту функцию, ее там не было... чтение ссылки на класс теперь доступно только для iOS5 +, поэтому вы можете проверить, доступна ли функция, прежде чем вызывать ее, если ваше приложение предназначен для работы с пред-iOS 5... вы можете сделать это так... if ([item respondsToSelector:@selector(setTitlePositionAdjustment:)]) { item.titlePositionAdjustment = UIOffsetMake(0, -5.0); } - person liamnichols; 04.05.2012