iOS - 在UITabBar上方获取所需的阴影效果

23

我正在尝试让我的选项卡栏阴影看起来像这个图像中看到的:

最好的方法是什么?我正在使用Objective-C
谢谢

7个回答

34
您可以通过使用以下代码向任何UI对象添加阴影。
tabBar.layer.shadowOffset = CGSize(width: 0, height: 0)
tabBar.layer.shadowRadius = 2
tabBar.layer.shadowColor = UIColor.black.cgColor
tabBar.layer.shadowOpacity = 0.3

这里我为你的tabControl对象提供了一个示例。


1
谢谢,这正是我想要的。如果有人想知道,为了使它看起来像那张图片,我使用了8个阴影半径和0.3的阴影不透明度。再次感谢! - rohinb
这对我不起作用。(iOS 13+)这些年有什么变化吗?上述代码在选项卡栏中的tabBarItems周围放置了一个阴影,而不是在选项卡栏本身上方放置阴影。 - Daniel T.

15

适用于 Swift 5:

tabBar.layer.shadowOffset = CGSize(width: 0, height: 0)
tabBar.layer.shadowRadius = 2
tabBar.layer.shadowColor = UIColor.black.cgColor
tabBar.layer.shadowOpacity = 0.3

12

Swift 4:

tabBar.layer.shadowOffset = CGSize(width: 0, height: 0)
tabBar.layer.shadowRadius = 2
tabBar.layer.shadowColor = UIColor.black.cgColor
tabBar.layer.shadowOpacity = 0.3

5

我更喜欢使用专门的选项卡栏方法。

// Set `backgroundImage` to be able to use `shadowImage`
let tabBarAppearance = UITabBar.appearance()

if #available(iOS 15.0, *) {
    let appearance = UITabBarAppearance()

    appearance.shadowImage = UIImage(named: "tab_shadow")
    tabBarAppearance.standardAppearance = appearance
    tabBarAppearance.scrollEdgeAppearance = appearance
} else {
    tabBarAppearance.backgroundImage = UIImage.imageWithColor(.white)
    tabBarAppearance.shadowImage = #imageLiteral(resourceName: "tab_bar_shadow") // 2x34pt works for me
}

但是你是如何根据阴影参数获取“tab_shadow”图像的? - MrKew
@MrKew 这是我的自定义图像,半透明像素。 - SoftDesigner
1
是的,但我只有阴影参数,如偏移量、模糊度、颜色等。但我通过使用UIGraphicsImageRenderer从阴影创建UIImage来解决了这个问题。 - MrKew

3

Swift 4:

使用这个扩展

extension UIImage {
class func colorForNavBar(color: UIColor) -> UIImage {
    //let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)

    let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: 1.0, height: 1.0))

    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()

    context!.setFillColor(color.cgColor)
    context!.fill(rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()


     return image!
    } 
}

使用RGB设置阴影颜色

//Set BackgroundColor
 UITabBar.appearance().backgroundImage = UIImage.colorForNavBar(color: .white)

//Set Shadow Color
 UITabBar.appearance().shadowImage = UIImage.colorForNavBar(color: UIColor.init(red: 120/255.0, green: 120/255.0, blue: 120/255.0, alpha: 1.0))

请解释 colorForNavBar 方法。 - Alexey Savchenko
@AlexeySavchenko 扩展已添加...! - Saifan Nadaf

0
self.tabBarController.tabBar.shadowImage = [[UIImage alloc] init];
self.tabBarController.tabBar.backgroundImage = [[UIImage alloc] init];
self.tabBarController.tabBar.backgroundColor = [UIColor whiteColor];
self.tabBarController.tabBar.layer.shadowOffset = CGSizeMake(0, 0);
self.tabBarController.tabBar.layer.shadowRadius = 1;
self.tabBarController.tabBar.layer.shadowColor = [UIColor blackColor].CGColor;
self.tabBarController.tabBar.layer.shadowOpacity = 0.2;

-2

试试这个

 [[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparentShadow.png"]];

没有图像,这个评论是无用的。 - CW0007007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接