Изменение ширины элементов UITabbarItms и полей между ними в приложении iPad - PullRequest
2 голосов
/ 29 августа 2011

Можно ли изменить ширину UITabbarItem в UITabbar и поля между каждым приложением UITabbarItem для iPad?

Проблема в том, что стандартные поля слишком велики для моего макета - клиент хочет, чтобы вкладки были более компактными:/

Или я должен связываться с UIToolbar для достижения этой цели?

Ответы [ 7 ]

2 голосов
/ 07 июля 2014

Для ширины элемента Tabbar:

[[UITabBar appearance] setItemWidth:self.window.frame.size.width/NUMBER_OF_ITEMS];

Для рамки вкладки:

[self.tabBar setFrame:rectFrame];
1 голос
/ 20 июля 2012

Я решил ту же самую проблему следующим образом: Моя цель состояла в том, чтобы настроить панель вкладок, используя изображения, которые были отправлены дизайнером для меня.

Я вложил файлы .png для проекта, инициализировал соответствующие переменные типа UIImage * и использовал функцию UITabBarItem setFinishedSelectedImage: withFinishedUnselectedImage: чтобы установить изображения для активного / неактивного состояния UITabbarItem:

UIImage * left_active, *left_inactive, *center_active, *center_inactive, *right_active, *right_inactive;
left_active = [UIImage imageNamed:@"left_active_img"];
...
[self.leftTabBarItem setFinishedSelectedImage:left_active withFinishedUnselectedImage:left_inactive];
[self.centerTabBarItem setFinishedSelectedImage:center_active withFinishedUnselectedImage:center_inactive];
[self.rightTabBarItem setFinishedSelectedImage:right_active withFinishedUnselectedImage:right_inactive];

Но настроенные элементы tabbarItem были меньше, чем изображения дизайнера, и располагались в центре экрана один за другим:

2) Чтобы это исправить, я добавил ДОПОЛНИТЕЛЬНЫЕ UITABBARITEMS - в левом и правом углу исходных

3) были созданы соответствующие торговые точки для UITabBarItems:

.h-файл:

@property (nonatomic, retain) IBOutlet UITabBar * tabBar;
// THE INTIAL items
@property (nonatomic, retain) IBOutlet UITabBarItem * leftTabBarItem;
@property (nonatomic, retain) IBOutlet UITabBarItem * centerTabBarItem;
@property (nonatomic, retain) IBOutlet UITabBarItem * rightTabBarItem;

// THE ADDITIONAL items
@property (nonatomic, retain) IBOutlet UITabBarItem * left_1;
@property (nonatomic, retain) IBOutlet UITabBarItem * left_2;
@property (nonatomic, retain) IBOutlet UITabBarItem * center_1;
@property (nonatomic, retain) IBOutlet UITabBarItem * center_2;
@property (nonatomic, retain) IBOutlet UITabBarItem * right_1;
@property (nonatomic, retain) IBOutlet UITabBarItem * right_2;

затем прикрепил розетки к UITabBarItems в порядке, указанном ниже:

  • left_1
  • leftTabBarItem
  • left_2
  • center_1
  • centerTabBarItem
  • center_2
  • right_1
  • rightTabBarItem
  • right_2

и ИСПРАВЛЕНО МЕТОД UITabbarDelegate в делегирующем классе для ТОЛЬКО переключения свеклы на видимые элементы .m-файл:

#pragma mark - UITabbarDelegate
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    if (item == self.leftTabBarItem) 
    {
        NSLog(@"0"); // first visible item selected

    } else if (item == self.centerTabBarItem)
    {
        NSLog(@"1"); // second visible item selected   

    } else if (item == self.rightTabBarItem)
    {
        NSLog(@"2"); // third visible item selected
    } else if (item == self.left_1){
        [self.tabBar setSelectedItem: self.leftTabBarItem];
    } else if (item == self.left_2){
        [self.tabBar setSelectedItem: self.leftTabBarItem];
    } else if (item == self.center_1){
        [self.tabBar  setSelectedItem: self.centerTabBarItem];
    }else if (item == self.center_2){
        [self.tabBar setSelectedItem: self.centerTabBarItem];
    }else if (item == self.right_1){
        [self.tabBar setSelectedItem: self.rightTabBarItem];
    } else if (item == self.right_2){
        [self.tabBar setSelectedItem: self.rightTabBarItem];
    }
}

Теперь все выглядит и работает правильно.

Вы можете использовать те же шаги, чтобы настроить размер и промежутки между UITabBarItems, добавив дополнительные элементы и исправив методы делегата.

0 голосов
/ 04 февраля 2019

Подклассы не нужны.

tabBarController.tabBar.itemPositioning = .centered
tabBarController.tabBar.itemWidth = 40
tabBarController.tabBar.itemSpacing = 38
0 голосов
/ 16 июля 2015

Вы можете использовать setSelectionIndicatorImage, чтобы сделать вашу вкладку более компактной.

Ширина UITabBarItem в iPad будет соответствовать ширине selectionIndicatorImage

в AppDelegate.m

[[UITabBar appearance] setItemWidth:self.window.frame.size.width/NUMBER_OF_YOUR_TAB];
[[UITabBar appearance] setItemSpacing:0];
[[UITabBar appearance] setSelectionIndicatorImage:[self imageFromColor:[UIColor clearColor] forSize:CGSizeMake(self.window.frame.size.width/NUMBER_OF_YOUR_TAB, 10) withCornerRadius:0]];

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

- (UIImage *)imageFromColor:(UIColor *)color forSize:(CGSize)size withCornerRadius:(CGFloat)radius
{
    CGRect rect = CGRectMake(0, 0, size.width, size.height);
    UIGraphicsBeginImageContext(rect.size);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    
    UIGraphicsBeginImageContext(size);
    [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius] addClip];

    // Draw your image
    [image drawInRect:rect];

    image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return image;
}
0 голосов
/ 13 марта 2013

Вы можете изменить расстояние между элементами панели вкладок, создав подкласс UITabBar и переопределив его метод layoutSubviews. Вы найдете все кнопки панели вкладок в массиве self.subViews. Их класс - непубличный UITabBarButton, но они наследуются от UIControl, поэтому вы можете идентифицировать все кнопки панели вкладок, проверяя, являются ли они классом UIControl. Тогда все, что вам нужно, это изменить рамку кнопок панели вкладок.

0 голосов
/ 29 августа 2011

Вы не можете изменить ширину UITabBarItem, и вы не можете сделать это даже после создания подкласса UITabBarItem.У Apple есть определенные ограничения в том, как они хотят, чтобы разработчики реализовывали приложения.

Для этого вам нужно будет использовать UIToolBar, и лучше всего вам перейти на github, а также множество примеров приложений, которые используют прокручиваемый UIToolBar внизу вместоUITabBar.

0 голосов
/ 29 августа 2011

Я не думаю, что это возможно. Вы можете создать собственную панель вкладок. Кроме того, работа с UItabbar по умолчанию может привести к отклонению во время процесса утверждения приложения.

...