2012-01-07 7 views
7

Tôi đang làm theo tấm gương về cách tạo một thanh tab với một nút trung tâm như Path, Instagram, vv từ đây: http://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/Ẩn nút thanh tab trung tâm khi bộ view đẩy HidesBottomBarWhenPushed

Vấn đề là tôi có khi một khung nhìn được đẩy lên ngăn xếp đặt HidesBottomBarWhenPushed để ẩn thanh tab, nút giữa vẫn được hiển thị.

Trong nhận xét, một số người khác đã gặp sự cố này, nhưng không có giải pháp làm việc. (Tôi đã thử tất cả các giải pháp được đề xuất trong các nhận xét)

Tôi đã đưa ra giải pháp hack-- lưu trữ tham chiếu đến nút giữa trong một lớp singleton không liên quan và sau đó có chế độ xem được ẩn khi nhấn nút được tải, và bỏ ẩn nó khi nó biến mất - nhưng điều này chỉ cảm thấy sai, và nó trông buồn cười bởi vì bạn có thể nhìn thấy nút biến mất trước khi hoạt hình xem đẩy bắt đầu.

Có ai làm việc này không?

+0

Tôi đang tìm một giải pháp cho cùng, tôi đã thử [self.tabBar addSubView: button]; nhưng nó không hoạt động – carbonr

+0

hy vọng điều này có thể giúp http://stackoverflow.com/questions/11225696/how-to-hide-custom-tab-bar-button-when-hidesbottombarwhenpushed-is-true?rq=1 – vamsi575kg

Trả lời

6

Tôi đã gặp vấn đề tương tự. Tôi đã chỉnh sửa BaseViewController.m (lớp con UITabBarController) bằng cách ghi đè phương thức viewDidLayoutSubviews sau đây (nút là nút trung tâm của tôi) như sau.

- (void)viewDidLayoutSubviews{ 
    button.center = self.tabBar.center; 
} 

Bây giờ, nút của bạn sẽ theo sau thanh tabbar.

+0

Ghi nhớ để bao gồm 'button.layer.zPosition = 1;', để ngăn chặn nút bị che bởi thanh tabbar – Lunayo

2

Bạn phải làm cùng này nhưng với UIImageView và thêm nó vào TabBar:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:    (UIViewController *)viewController 
{ 
    if (tabBarController.selectedIndex != AUCenterTabBarButtonIntex) { 
     self.centerImageView.highlighted = NO; 
    } else { 
     self.centerImageView.highlighted = YES; 
     self.selectedIndex = AUCenterTabBarButtonIntex; 
    } 

} 


- (void)addCenterImageViewWithImage:(UIImage *)image highlitedImage:(UIImage *)highlitedImage 
{ 
    UIImageView *centerImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width/2, image.size.height/2)]; 
    centerImageView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; 

    centerImageView.image = image; 
    centerImageView.highlightedImage = highlitedImage; 

    CGFloat heightDifference = centerImageView.frame.size.height - self.tabBar.frame.size.height; 
    if (heightDifference < 0) 
     centerImageView.center = CGPointMake(self.tabBar.center.x, centerImageView.center.y); 
    else 
    { 
     CGPoint center = self.tabBar.center; 
     center.y = (self.tabBar.frame.size.height/2) - (heightDifference/2); 
     centerImageView.center = center; 
    } 

    [self.tabBar addSubview:centerImageView]; 

    self.centerImageView = centerImageView; 
} 
1

Trước khi đẩy UIViewController, thêm nút tùy chỉnh của bạn để UITabBar

Sau UIViewController pop, khôi phục nút tùy chỉnh để tự. xem

Subclass UITabViewController

NSArray *array= self.viewControllers; 
for(UIViewController *controller in array){ 
if([controller isKindOfClass:[UINavigationController class]]){ 
    UINavigationController *navigationController=(UINavigationController*)controller; 
    navigationController.delegate=self; 
    } 
} 

Thực hiện phương thức ủy nhiệm

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
if (viewController.hidesBottomBarWhenPushed) { 
    CGRect rect= [button convertRect:button.bounds toView:self.tabBar]; 
    [button removeFromSuperview]; 
    [self.tabBar addSubview:button]; 
    button.frame=rect; 
} 
} 
-(void)navigationController:(nonnull UINavigationController *)navigationController didShowViewController:(nonnull UIViewController *)viewController animated:(BOOL)animated{ 
if(!viewController.hidesBottomBarWhenPushed){ 
    CGRect rect= [button convertRect:button.bounds toView:self.view]; 
    [button removeFromSuperview]; 
    [self.view addSubview:button]; 
    button.frame=rect; 
} 
}