Swift 3 - 用于selectionIndicatorImage的UITabBarItem的全宽度

时间:2017-05-03 09:02:34

标签: ios swift swift3 uitabbar uitabbaritem

我有一个带有三个标签的UITabBar。现在我想分配或者说让一个标签的完整宽度填充到相关的selectionIndicatorImage,因为如果选择了一个标签,我当前有一个边框。就像左侧的标签显示在以下屏幕截图中一样:

border

我使用新属性创建了UITabBar的子类:

var activeItemBackground:UIColor = UIColor.white {
    didSet {

        let numberOfItems = CGFloat((items!.count))

        let tabBarItemSize = CGSize(width: frame.width / numberOfItems,
                                    height: frame.height)

        selectionIndicatorImage = UIImage.imageWithColor(color: activeItemBackground,
                                     size: tabBarItemSize).resizableImage(withCapInsets: .zero)

        frame.size.width = frame.width + 4
        frame.origin.x = -2


    }
}

和UIImage-Extension以获得backgroundColor和图像:

extension UIImage
{
    class func imageWithColor(color: UIColor, size: CGSize) -> UIImage
    {
        let rect: CGRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(rect)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
}

我读了很多关于这个问题的东西但不幸的是我无法让它发挥作用。我的代码中缺少什么东西?

1 个答案:

答案 0 :(得分:1)

我认为你需要采取额外的措施......

您正在计算标签栏项目的确切尺寸,并创建该尺寸的图像,因此您不需要<div class="head"> </div> <div class="content"> <div class="logo-wrapper"> <div class="logo"></div> </div> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce volutpat tincidunt ultrices. Proin suscipit neque sit amet malesuada tincidunt. Aliquam ut sem placerat odio rutrum efficitur sed eu diam. Nunc pellentesque nunc id maximus vehicula. Nulla eu feugiat diam. Ut ultrices ligula tellus, non sagittis sapien venenatis id </div>部分。

而且,由于您设置的是精确尺寸,因此您也不需要调整标签栏的大小。

这似乎在我的测试中运行正常(使用.resizableImage func):

.imageWithColor

然后在第一个VC的viewDidLoad中:

class MyTabBar: UITabBar {

    var activeItemBackground:UIColor = UIColor.white {
        didSet {

            let numberOfItems = CGFloat((items!.count))

            let tabBarItemSize = CGSize(width: frame.width / numberOfItems,
                                        height: frame.height)

            selectionIndicatorImage = UIImage.imageWithColor(color: activeItemBackground,
                                                             size: tabBarItemSize)

        }
    }

}