2014-10-31 7 views
6

Ich ändere setSelectionIndicatorImage und wenn ich App auf iOS 8 ausführen, bekomme ich Abstand zwischen Bild und reguläre Breite von tabBar. Gibt es eine Möglichkeit, die Höhe der Tableiste mit setSelectionIndicatorImage abzustimmen? Außerdem erhalte ich einen Rand von wenigen Pixeln auf der linken Seite des ersten Tabs und auf der rechten Seite des letzten Tabs, und ich muss diesen auch mit Bild abdecken, wenn Tab ausgewählt ist.UITabBar Auswahl Indikator Bild nimmt nicht die gesamte Größe der TabBar Höhe in ObjectiveC

+0

Bitte fügen Sie das geänderte und gewünschte Bild hinzu. Füge auch deinen Code hinzu. – Rajesh

+0

Überprüfen Sie auch dieses Tutorial. Es kann hilfreich sein. http://blog.erikvdwal.nl/customizing-the-uitabbar-in-ios-5-and-ios-6/ – Rajesh

+0

Bitte beachten Sie die richtige Bildgröße für ausgewählte/abgewählte Tabbar Bilder. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html – Meet

Antwort

0

Dies sollte Sie das Kennzeichen Bild, das Sie benötigen jedoch anpassen helfen. Sie legen im Interface-Builder die Klasse der Registerkartenleiste auf diese Klasse fest

class MyCustomTabBar: UITabBar 
{ 
    var didInit = false 
    override func layoutSubviews() 
    { 
     super.layoutSubviews() 

     if didInit == false 
     { 
      didInit = true 
      for subview in subviews { 
       // can't hookup to subviews, so do layer.sublayers 
       subview.layer.addObserver(self, forKeyPath: "sublayers", options: .New, context: nil) 
      } 
     } 
    } 

    deinit 
    { 
     for subview in subviews 
     { 
      subview.layer.removeObserver(self, forKeyPath: "sublayers") 
     } 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) 
    { 
     // layer.delegate is usually the parent view 
     if let l = object as? CALayer, tbButton = l.delegate as? UIView where tbButton.window != nil 
     { 
      for v in tbButton.subviews 
      { 
       if String(v.dynamicType) == "UITabBarSelectionIndicatorView" { 
        // do whatever needed with v, this is your indicator view 
       } 
      } 
     } 
    } 
} 
2

auf didFinishLaunchingWithOptions setzen diesen Code:

UITabBarController *tabBarContr = (UITabBarController *)self.window.rootViewController; 

CGFloat tabBarItemWidth = self.window.rootViewController.view.bounds.size.width/tabBarContr.tabBar.items.count; 
CGFloat tabBarItemHeight = CGRectGetHeight(tabBarContr.tabBar.frame); 

UIView *selectedBottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tabBarItemWidth, tabBarItemHeight)]; 

CAGradientLayer *gradient = [CAGradientLayer layer]; 

gradient.colors = [NSArray arrayWithObjects: 
        (id)[UIColor blueButton].CGColor, 
        (id)[UIColor colorWithRed:0.08 green:0.54 blue:1 alpha:1].CGColor, 
        nil]; 

gradient.frame = selectedBottomView.bounds; 

[selectedBottomView.layer insertSublayer:gradient atIndex:0]; 

UIGraphicsBeginImageContext(selectedBottomView.bounds.size); 
[selectedBottomView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

tabBarContr.tabBar.selectionIndicatorImage = image; 
tabBarContr.tabBar.translucent = YES; 
tabBarContr.tabBar.tintColor = [UIColor whiteColor]; 

Hinweis: Nehmen Sie Imageview statt Steigung