当前位置: 首页 > 面试题库 >

如何使UITabBar选择指示器图像填充整个空间?

温浩大
2023-03-14
问题内容

我有一个UITabBarController,在其中使用此代码来设置选择指示器图像:

let selectedBG = UIImage(named:"tabbarbgtest.png")?.resizableImageWithCapInsets(UIEdgeInsetsMake(0, 0, 0, 0))
UITabBar.appearance().selectionIndicatorImage = selectedBG

但是该图像不能填充整个空间-请参见下图:

在此处输入图片说明

图像只是一个红色的正方形,分辨率为82x49px,但是图像较宽时,它仍然无法填充整个空间。希望你们能提供帮助-谢谢。


问题答案:

如果要在选项卡选择上设置红色图像,我建议您设置活动的选项卡栏项目的背景颜色,根据我的意见,只要您可以使用编码进行编码,为什么要使用图像,因此最好设置选择颜色,而不是图片。您可以使用以下代码来实现。

    // set red as selected background color
    let numberOfItems = CGFloat(tabBar.items!.count)
    let tabBarItemSize = CGSize(width: tabBar.frame.width / numberOfItems, height: tabBar.frame.height)
    tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.red, size: tabBarItemSize).resizableImage(withCapInsets: .zero)

    // remove default border
    tabBar.frame.size.width = self.view.frame.width + 4
    tabBar.frame.origin.x = -2

利用以下扩展UIImage

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
    }
}

希望对您有所帮助。

其他方式:

在您的tabBarController中,您可以设置图像的默认UITabBar
tintColor,barTintColor,selectionIndicatorImage(在此处作一些说明)和renderingMode,请参见以下注释:

    class MyTabBarController: UITabBarController, UINavigationControllerDelegate {
    ...
    override func viewDidLoad() {
        ...
            // Sets the default color of the icon of the selected UITabBarItem and Title
            UITabBar.appearance().tintColor = UIColor.red
        // Sets the default color of the background of the UITabBar
        UITabBar.appearance().barTintColor = UIColor.black

        // Sets the background color of the selected UITabBarItem (using and plain colored UIImage with the width = 1/5 of the tabBar (if you have 5 items) and the height of the tabBar)
        UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(color: UIColor.blue, size: CGSize(width: tabBar.frame.width/5, height: tabBar.frame.height))

        // Uses the original colors for your images, so they aren't not rendered as grey automatically.
        for item in (self.tabBar.items)! {
        if let image = item.image {
            item.image = image.withRenderingMode(.alwaysOriginal)
        }
    }
    }
    ...
}

您将需要扩展UIImage类,以制作具有所需大小的纯色图像:

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


 类似资料:
  • 我一直在使用View Pager的图片幻灯片,但是我无法使View Pager内部的图像视图填充View Pager内部水平和垂直的完整空间。知道怎么做吗? 我在我的页面适配器中尝试过这个 但还是没有运气:( 我的布局 null 我的PageAdapter

  • 我的图像滑块不是我想要的方式。 除非我的浏览器窗口很小,否则图像不会填满容器的整个宽度。当我的窗口较大时,图像的右侧有一个空白,而不是图像填满整个宽度。 这是我的代码: 和CSS:

  • 问题内容: 好的,这是我对Ajax的第一次尝试,它使我发疯,因为我实在无法绕开它。我想做的是在第一个框中用数据库中的客户填充,然后使用customerID通过select.php脚本从数据库中选择所有车辆ID。发生的情况是“客户”框被选中,但是选择客户时什么也没有发生。 这是我的Test.php文件: 这是我的select.php文件: 我正在尝试修改本教程以使用数据库,但到目前为止我没有成功。

  • Ive得到了一个JFrame,并将LayoutManager设置为BorderLayout,然后继续添加带有图像的JLabel。但是,当我调整框架的大小时,JLabel不会调整大小。我没有向North,S,E等添加任何组件。我希望简单地让标签内的图像填满整个框架,当然,让我的菜单保持机智。

  • 我有一个<代码> 窄的标题行 我想占用div剩余部分的图像。 如何使用纯CSS(无Javascript)实现这一点?我一直在尝试很多事情,运气不好。 这是我能得到的最接近的;图像偷偷溜出了的绿色边框 下面是我尝试使用,但失败了。

  • 我有一个名为<code>cars_denorm</code>的非规范化表,它包含以下列: 在规范化这些数据的最后,我为、color列创建了单独的表——这三个表由 我正在尝试填充一表,该表是列 并且引用来自< code>make 、< code>model和< code>color表的id。基本上,我希望遍历< code>cars_denorm表中的每一行,并为每一行查询< code>make 、<