Swift

2015-11-12 11 views
5

'daki bir UITabbarItem için bir seçim göstergesi olarak bir satır ekleyin UEbabbariyemsinin altındaki kalın bir çizgiyi seçim göstergesi olarak kullanmak istiyorum. Uygulamanın farklı telefon boyutlarında çalışması gerektiğinden, bir resmi seçim göstergesi olarak kullanamıyorum. Bu yüzden bunu yapmak için Swift'i kullanmam gerektiğini düşünüyorum. (Satır, sayfa genişliğinin 1/3'ü olmalı).Swift

UITabBarItem.appearance()'u kullanmayı denedim ancak başarılı olmadı.

+0

“UIView” kullanabilirsiniz ve aynı arka plan rengini aynı şekilde ayarlayabilirsiniz. – Nishant

cevap

3

Sorunumu çözdüm. Bu küçücük Kod parçası

Özellikler:

  • genişliği
  • animasyon
  • dinamiktir bunu çok daha özelleştirilebilir gelecek özellikler

    class FirstViewController: UIViewController { 
    
    let rectShape = CAShapeLayer() 
    let indicatorHeight: CGFloat = 5 
    var indicatorWidth: CGFloat! 
    let indicatorBottomMargin: CGFloat = 2 
    let indicatorLeftMargin: CGFloat = 2 
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        // setup tabbar indicator 
        rectShape.fillColor = UIColor.redColor().CGColor 
        indicatorWidth = view.bounds.maxX/2 // count of items 
        self.tabBarController!.view.layer.addSublayer(rectShape) 
        self.tabBarController?.delegate = self 
    
        // initial position 
        updateTabbarIndicatorBySelectedTabIndex(0) 
    } 
    
    func updateTabbarIndicatorBySelectedTabIndex(index: Int) -> Void 
    { 
        let updatedBounds = CGRect(x: CGFloat(index) * (indicatorWidth + indicatorLeftMargin), 
               y: view.bounds.maxY - indicatorHeight, 
               width: indicatorWidth - indicatorLeftMargin, 
               height: indicatorHeight) 
    
        let path = CGPathCreateMutable() 
        CGPathAddRect(path, nil, updatedBounds) 
        rectShape.path = path 
    } 
    } 
    
    extension FirstViewController: UITabBarControllerDelegate { 
    
    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
        updateTabbarIndicatorBySelectedTabIndex(tabBarController.selectedIndex) 
    } 
    } 
    
10

UITabBar nesnesinde, kodunuzda oluşturulacak özel resim eklemek için selectionIndicatorImage nesnesine yapabilirsiniz. Örneğin UIImage sınıf böyle için extension oluşturabilirsiniz:

: böyle olacak bu durumda sonuç olarak

class FirstViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let tabBar = self.tabBarController!.tabBar 
     tabBar.selectionIndicatorImage = UIImage().createSelectionIndicator(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/CGFloat(tabBar.items!.count), tabBar.frame.height), lineWidth: 2.0) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

:

extension UIImage { 
    func createSelectionIndicator(color: UIColor, size: CGSize, lineWidth: CGFloat) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(size, false, 0) 
     color.setFill() 
     UIRectFill(CGRectMake(0, size.height - lineWidth, size.width, lineWidth)) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image 
    } 
} 

Ve ilk kimseyi arama böyle ViewController yüklenen enter image description here

7

içindir Swift 3:

+0

Teşekkür ederim, benim sorunum çözüldü –

+0

teşekkür ederim, ama iphone X 11.2, bu çalışmıyor, 2.0px bar tarbar, onun gidiş 20pix aşağı hizalama anlamına gelir. Herhangi bir fikir? –