iOS UITabBar:删除顶部阴影渐变线

时间:2013-01-17 02:38:08

标签: iphone ios uitabbarcontroller uitabbar

我实现了一个自定义UITabBar,我仍然在它上面有这个渐变/阴影。 我添加了

[self.tabBar setBackgroundImage:[UIImage imageNamed:@"navBarBottom.png"]];

只是改变背景但保持阴影渐变。

我做错了什么?是否有任何指定可以摆脱它?

我有什么:

top shadow

我想要的是什么:

without shadow

谢谢。

15 个答案:

答案 0 :(得分:117)

回答this question的问题......如果你不想搞乱任何一种1x1透明图像,这项工作也是如此:

[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; 
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

在swift:

UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()

答案 1 :(得分:36)

尝试为UITabBar设置1x1像素透明阴影图像:

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

答案 2 :(得分:16)

<强>夫特

尝试使用自定义标签栏。它会隐藏水平阴影线。

self.tabBar.setValue(true, forKey: "_hidesShadow")

目标C

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];

答案 3 :(得分:7)

Swift 4

UITabBar.appearance().layer.borderWidth = 0.0
UITabBar.appearance().clipsToBounds = true

答案 4 :(得分:4)

此代码可在iOS 13及更低版本上运行

if #available(iOS 13, *) {
    let appearance = self.tabBar.standardAppearance.copy()
    appearance.backgroundImage = UIImage()
    appearance.shadowImage = UIImage()
    appearance.shadowColor = .clear
    self.tabBar.standardAppearance = appearance
} else {
    self.tabBar.backgroundImage = UIImage()
    self.tabBar.shadowImage = UIImage()
}

答案 5 :(得分:2)

致电[[UITabBar appearance] setShadowImage:]会自定义应用中的所有UITabBar个实例。

如果您只想自定一个UITTabBar,可以执行以下操作:

[self.tabBarController.navigationController.navigationBar setShadowImage:[UIImage new]];

答案 6 :(得分:2)

这是另一个易于实现的答案:

[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];

为我工作。

答案 7 :(得分:2)

只是设置图像,它不会删除阴影线,你必须将它的borderWidth设置为0.这里是代码

[[UITabBar外观] setShadowImage:[UIImage new]];

[UITabBar外观] .layer.borderWidth = 0.0f;

[UITabBar外观] .clipsToBounds = true;

答案 8 :(得分:1)

将其放在 didFinishLaunchingWithOptions 下的 AppDelegate 中:

[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];

答案 9 :(得分:1)

我通过以下方法获得了相同的外观。
1.将背景栏色调颜色设置为与主父视图背景色相同。
2。

this.TabBar.BarStyle = UIBarStyle.BlackOpaque;

我在Xamarin中使用了它,请验证Swift语法。

答案 10 :(得分:0)

在视图控制器或视图控制器或BasicViewController中,大多数viewcontrollers在viewDidLoad中继承只是放了这两行:

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tab_bar_background"]];
[[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparent_shadow"]];

确保transparent_shadow@2x.png是图像1x1或2x2透明,tab_bar_background@2x.png是图像640x100,因为底部栏的高度为50px。

适用于iOS 9.3

答案 11 :(得分:0)

在viewDidload上试试这个。

override func viewDidLoad() {
        super.viewDidLoad()

        self.tabBar.setValue(true, forKey: "_hidesShadow")
}

它适合我

答案 12 :(得分:0)

试试这个, **目标-C **

//Remove shadow image by assigning nil value.
[[UITabBar appearance] setShadowImage: nil];

// or 

// Assing UIImage instance without image reference
[[UITabBar appearance] setShadowImage: [[UIImage alloc] init]];

** Swift **

//Remove shadow image by assigning nil value.
UITabBar.appearance().shadowImage = nil

// or 

// Assing UIImage instance without image reference
UITabBar.appearance().shadowImage = UIImage()


这是shadowImage的苹果指南。

@available(iOS 6.0, *)
open var shadowImage: UIImage?
  

默认为零。当非零时,显示自定义阴影图像而不是   默认阴影图像。要显示自定义阴影,请自定义   必须使用-setBackgroundImage设置背景图像:(如果是   使用默认背景图像,默认阴影图像将是   使用)。

答案 13 :(得分:0)

如果您需要从具有自定义字体的标签栏上删除iOS 13上的阴影线,则必须通过以下方式应用它:

if #available(iOS 13.0, *) {
   let appearance = UITabBarAppearance()
   appearance.stackedLayoutAppearance.normal.titleTextAttributes = ...
   appearance.stackedLayoutAppearance.selected.titleTextAttributes = ...
   appearance.shadowColor = .clear
   tabBar.standardAppearance = appearance
 }

答案 14 :(得分:-1)

在iOS 7中 - 这有效:

[self.actionToolbar setShadowImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny];
[self.actionToolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

希望能有所帮助。