2014-09-17 3 views
3

Я установка SelectionIndicatorImage как растяжению изображения (для размещения на различные ширины устройства) с помощью UITabBar внешнего вида:Как удалить UITabBarItem selectionImage padding?

UIImage *selectedImage = [[UIImage imageNamed:@"SelectedTab"] stretchableImageWithLeftCapWidth:0 topCapHeight:0]; 
[[UITabBar appearance] setSelectionIndicatorImage:selectedImage]; 

В результате я получить 2pt отступов по краям экрана. В основном я пытаюсь использовать индикатор выбора в качестве фона для выбранного в настоящее время UITabBarItem.

http://i.stack.imgur.com/qFHEk.png

Что бы быть простой способ решить эту проблему?

ответ

1

Если вы хотите использовать UITabBarController в приложении с выбором и unselection функции, то вы должны этот код

[[self.tabBarController tabBar] setBackgroundImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"bg_tabBar" ofType:@"png"]]]; 
[[self.tabBarController tabBar] setSelectionIndicatorImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"bg_tabItem_selected" ofType:@"png"]]]; 

NSArray *arrTabItems = [[self.tabBarController tabBar] items]; 
UITabBarItem *tabBarItem = [arrTabItems objectAtIndex:0]; 
[tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"img_selected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"img_unselected.png"]]; 
[tabBarItem setImageInsets:UIEdgeInsetsMake(5, 5, 0, 5)]; 
+0

Это, похоже, не помогает, прокладка, кажется, остается в любом случае. Кроме того, я хотел бы, чтобы изображение изменялось (чтобы адаптироваться к различным размерам UITabBar). – jannemecek

0

Я пытался что-то подобное. Законченное таким образом:

Подкласс UITabBarController и добавить свойство:

@property(nonatomic, readonly) UIImageView *imageView; 

Настройка изображение, как вы хотите:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabbaritem"]]; 
    [self.tabBar addSubview:self.imageView]; 
} 

Поместите подтаблицы в правильном положении:

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    // get all UITabBarButton views 
    NSMutableArray *tabViews = [NSMutableArray new]; 
    for (UIView *view in self.tabBar.subviews) { 
     if ([view isKindOfClass:[UIControl class]]) { 
      [tabViews addObject:[NSValue valueWithCGRect:view.frame]]; 
     } 
    } 

    // sort them from left to right 
    NSArray *sortedArray = [tabViews sortedArrayUsingComparator:^NSComparisonResult(NSValue *firstValue, NSValue *secondValue) { 
     CGRect firstRect = [firstValue CGRectValue]; 
     CGRect secondRect = [secondValue CGRectValue]; 

     return CGRectGetMinX(firstRect) > CGRectGetMinX(secondRect); 
    }]; 

    // place your imageView on selected index button frame 
    CGRect frame = self.tabBar.bounds; 
    CGSize imageSize = CGSizeMake(CGRectGetWidth(frame)/self.tabBar.items.count, self.imageView.image.size.height); 
    CGRect selectedRect = sortedArray.count > self.selectedIndex ? [sortedArray[self.selectedIndex] CGRectValue] : CGRectZero; 
    [self.imageView setFrame:CGRectIntegral(CGRectMake(CGRectGetMinX(selectedRect), CGRectGetMaxY(frame) - imageSize.height, 
                 CGRectGetWidth(selectedRect), imageSize.height))]; 
} 

Затем вам нужно только обновить макет при каждом изменении вкладок:

- (void)setSelectedIndex:(NSUInteger)selectedIndex { 
    [super setSelectedIndex:selectedIndex]; 

    [self.view setNeedsLayout]; 
} 

- (void)setSelectedViewController:(UIViewController *)selectedViewController { 
    [super setSelectedViewController:selectedViewController]; 

    [self.view setNeedsLayout]; 
} 

Старый ответ, как удалить отступы (это то, что я, во-первых, как понял ваш вопрос, я оставляю его в качестве справочного материала для других людей).

В прошивке 7+ UITabBar имеет следующие свойства:

/* 
Set the itemSpacing to a positive value to be used between tab bar items 
when they are positioned as a centered group. 
Default of 0 or values less than 0 will be interpreted as a system-defined spacing. 
*/ 
@property(nonatomic) CGFloat itemSpacing NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR; 

Это позволит вам избавиться от прокладки между элементами.

+0

thats также перемещает изображение tabbaritem? Он спрашивает о selectionImage – tspentzas

Смежные вопросы