设置SelectionIndicatorImage的尺寸错误,适用于iphone 6和iPhone 6+

时间:2014-10-21 10:05:27

标签: ios objective-c

我正在使用以下方法为所选标签栏项目设置选择指标。它适用于iPhone 4 / 4s / 5 / 5s但不适用于iphone 6/6 +。

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"activeshape.png"] ];

任何建议

2 个答案:

答案 0 :(得分:15)

编辑:看来,在所有这个解决方案应该工作之后,我遇到了一些缓存问题

UIImage *selTab = [[UIImage imageNamed:@"tabHighlight"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
CGSize tabSize = CGSizeMake(CGRectGetWidth(self.view.frame)/5, 49);
UIGraphicsBeginImageContext(tabSize);
[selTab drawInRect:CGRectMake(0, 0, tabSize.width, tabSize.height)];
UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//
[self.tabBar setSelectionIndicatorImage:reSizeImage];

tabHiglight是一个82x49的png,我已经测试了其他尺寸,但这似乎最合适。 我将框架的width除以tabBar中的项目数量 - 在我的情况下为5,然后我创建一个新的UIImage" right"大小并将其设置为selectionIndicatorImage

答案 1 :(得分:1)

这是我的自动调整UITabBarController子类。只需提供一个图像,它将适应所有已知的iPhone和iPad。每当特征集合发生变化时,它也会更新大小,因此它支持所有新的iPad功能和旋转。

import UIKit

class TabBarController: UITabBarController {
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        updateSelectionIndicatorImage()
    }

    override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        updateSelectionIndicatorImage()
    }

    func updateSelectionIndicatorImage() {
        let width = CGRectGetWidth(tabBar.bounds) > 420 ? 420 : CGRectGetWidth(tabBar.bounds)
        var selectionImage = UIImage(named: "TabSelectionIndicator")
        let tabSize = CGSizeMake(width/5, 49)

        UIGraphicsBeginImageContext(tabSize)
        selectionImage?.drawInRect(CGRectMake(0, 0, tabSize.width, tabSize.height))
        selectionImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        tabBar.selectionIndicatorImage = selectionImage
    }
}