Vla*_*lad 5 ios swift iphone-x
代码:
let size = CGSize(width: tabBar.frame.width / CGFloat(TabBarItem.allValues.count),
height: tabBar.frame.height)
let image = UIImage.image(color: Color.action, size: size)
UITabBar.appearance().selectionIndicatorImage = image
Run Code Online (Sandbox Code Playgroud)
在通常的设备上看起来像这样:
在iPhone X上像这样:
iPhone X标签栏项目背景错位的原因是什么?
更新1:
更改代码后,它看起来更好,但它仍然是解决方法,因为图像不完全占据标签栏项目空间:
var image: UIImage
if DeviceInfo.is5p8Inch {
image = UIImage.image(color: Color.action, size: CGSize(width: 4, height: 4))
image = image.resizableImage(withCapInsets: UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2), resizingMode: .tile)
} else {
let size = CGSize(width: tabBar.frame.width / CGFloat(TabBarItem.allValues.count),
height: tabBar.frame.height)
image = UIImage.image(color: Color.action, size: size)
}
Run Code Online (Sandbox Code Playgroud)
更新2:
上面的代码从viewDidLoad(也尝试从viewWillAppear)调用.UITabBarController从代码中编写的100%的子类(没有使用Storyboard/Xibs).
更新3:
我们还有一个自定义按钮作为子视图添加到UITabBar,它正确定位.只是selectionIndicatorImage错位......
更新4:
在上面运行原始代码viewDidAppear而不是in viewDidLoad或viewWillAppear产生以下结果:
您只需要在延迟后调用它,因为在您的情况下它没有获得正确的 tabBar 高度并将其设置在 self.tabBar 中,下面的代码对我有用,我在viewDidload
Async.main {
let size = CGSize(width: tabBar.frame.width / CGFloat(TabBarItem.allValues.count),
height: tabBar.frame.height)
let image = UIImage.image(color: Color.action, size: size)
UITabBar.appearance().selectionIndicatorImage = image
self.tabBar.selectionIndicatorImage = image // this will change color and height of current tabBar
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |