所以我的.png是428×176像素: 当项目处于选定状态时,我想将其用作标签栏背景图像.问题是图像太大了.所以现在,我正在探索不同的分辨率后缀:@ 1x,@ 2x,@ 3x.但无论我附加到图像文件名,图
当项目处于选定状态时,我想将其用作标签栏背景图像.问题是图像太大了.所以现在,我正在探索不同的分辨率后缀:@ 1x,@ 2x,@ 3x.但无论我附加到图像文件名,图像对于标签栏项目的背景仍然太大,尽管随着我增加分辨率因子它会变小.如何确定此图像的正确尺寸?
请记住,这是任何特定UITabBarItem处于选定状态时的背景图像.它意味着UITabBarItem的整个宽度和高度.我的标签栏将在屏幕的宽度上放置三个项目.
更新:
很多答案都提供了基于swift的解决方案,但我要求的是我的图像应该以像素为单位的尺寸,换句话说,我应该在包中包含什么尺寸的图像,以便图像适合于所有屏幕尺寸的标签栏.我想,因为UITabBar默认需要一个UIImage作为其selectionIndicatorImage字段而不是UIImageView,必须有一个解决方案,不涉及黑客攻击UITabBar并添加UIImageView作为它的子视图并管理图像视图的位置应该根据当前选择的UITabBarItem手动进入.
我将这个问题的答案作为参考 how to make UITabBar selection indicator image fill the whole space?作为参考:UITabBarController的子类
即使旋转,它也适用于多个设备.
笔记:
>使图像的渲染模式为原始模式.
>如果您以编程方式执行屏幕,请将以下类分配给Storyboard中的UITabBarController或基类.
// // BaseTabBarController.swift // MyApp // // Created by DRC on 1/27/17. // Copyright © 2017 PrettyITGirl. All rights reserved. // import UIKit class BaseTabBarController: UITabBarController { let numberOfTabs: CGFloat = 4 let tabBarHeight: CGFloat = 60 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) updateSelectionIndicatorImage() } override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() updateSelectionIndicatorImage() } func updateSelectionIndicatorImage() { let width = tabBar.bounds.width var selectionImage = UIImage(named:"myimage.png") let tabSize = CGSize(width: width/numberOfTabs, height: tabBarHeight) UIGraphicsBeginImageContext(tabSize) selectionImage?.draw(in: CGRect(x: 0, y: 0, width: tabSize.width, height: tabSize.height)) selectionImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() tabBar.selectionIndicatorImage = selectionImage } }