2013-05-24 4 views
1

Мне интересно, есть ли способ сделать панель вкладок с только большими значками, я приложил изображение ниже для справки. Я не заинтересован в создании собственного контроллера панели вкладок и сам управления контроллерами представлений.Tab Bar с большими значками

enter image description here

+0

Я искал много, nothin g подошел. Я закончил подклассификацию 'UITabBarController', в чем причина не использовать подкласс? – limon

+0

Я думал, что это считается классом, который вы не должны подкласса, но если бы вы сделали и повезло, не могли бы вы показать, что вы сделали? – Vikings

ответ

5

Вот мое решение, я создал класс, который является подклассом UITabBarController.

CustomTabBarController.h

@interface CustomTabBarController : UITabBarController<UITabBarControllerDelegate> 
@property (strong, nonatomic) IBOutlet UITabBar *tabBar; 
@end 

CustomTabBarController.m

- (void)viewDidLoad 
{ 
    CGRect tabBarFrame = self.tabBar.frame ; 
    tabBarFrame.origin.y -= kOrigin; 
    tabBarFrame.size.height = kTabBarHeight; 
    self.tabBar.frame = tabBarFrame; 
    self.tabBarController.delegate = self; 
    /* Tab Bar Background */ 

    UIImage *tabBarBackgroundImage = [UIImage imageNamed:@"tabBarBackgroundImage.png"]; 
    [[UITabBar appearance] setBackgroundImage:tabBarBackgroundImage]; 

    /* Tab Bar Item */ 
    UIButton *surveyButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [surveyButton addTarget:self action:@selector(surveyButtonDidSelect) forControlEvents:UIControlEventTouchUpInside]; 
    surveyButton.tag = surveyButtonTag; 
    [surveyButton setBackgroundImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal]; 
    CGRect surveyButtonFrame = surveyButton.frame ; 
    surveyButtonFrame.origin.x = /*Proper value in your case */; 
    surveyButtonFrame.origin.y = /*Proper value in your case */; 
    surveyButtonFrame.size.height = /*Proper value in your case */ ; 
    surveyButtonFrame.size.width =/*Proper value in your case */; 
    surveyButton.frame = surveyButtonFrame; 
    [self.tabBar addSubview:surveyButton]; 

    UIButton *statusButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    statusButton.tag = statusButtonTag; 
    [statusButton addTarget:self action:@selector(statusButtonDidSelect) forControlEvents:UIControlEventTouchUpInside]; 
    [statusButton setBackgroundImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal]; 
    CGRect statusButtonFrame = statusButton.frame ; 
    statusButtonFrame.origin.x = /*Proper value in your case */; 
    statusButtonFrame.origin.y = /*Proper value in your case */; 
    statusButtonFrame.size.height = /*Proper value in your case */; 
    statusButtonFrame.size.width = /*Proper value in your case */; 
    statusButton.frame = statusButtonFrame; 
    [self.tabBar addSubview:statusButton]; 
} 

-(void)surveyButtonDidSelect 
{ 
    self.selectedIndex = 0 ; 
} 
-(void)statusButtonDidSelect 
{ 
    self.selectedIndex = 1; 
} 

Это работает для меня, и я не получил никаких проблем. Надеюсь, это помогает.

+0

Я дам этот снимок сегодня вечером, спасибо – Vikings

0

Размер макс для изображения в панели вкладок на iPhone 5/iPhone 4 96 х 64, так что вы несколько ограничены там без прокатки своего собственного. Хотя в вашем примере изображение может помещаться в ограничения.

0

Чтобы добавить к ответу @ limon, если вы хотите изменить высоту пользовательского UITabBar, я нашел из другого ответа SO, извините, не помню ссылку на веб-ссылку, следующий код сделал трюк и заблокировал его внизу а также, где я нашел с кодом @ Limon-й лет UITabBar не было расположить на одном уровне в нижней части из коробки с его кодом:

override func viewWillLayoutSubviews() { 
    //UITabBar Height 
    var tabFrame: CGRect = self.tabBar.frame 
    tabFrame.size.height = 75 
    tabFrame.origin.y = self.view.frame.size.height - 75 
    self.tabBar.frame = tabFrame 
} 

Очевидно, что вы хотите удалить подобный код от ответа Limon или, возможно, переместить весь свой код snippet to viewWillLayoutSubviews Я не пробовал это, я назвал его код в своем viewDidLoad