【问题标题】:There's a shadow on my button我的按钮上有阴影
【发布时间】:2011-11-29 19:41:15
【问题描述】:

我正在以编程方式为 iPad 应用程序创建一个按钮。当我看到按钮时,它下方似乎有一个阴影类型的东西。它是什么,我怎样才能摆脱它?

这是创建它的代码:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
myButton.titleLabel.font = [UIFont fontWithName:@"Trebuchet MS" size:12];
[myButton setTitle:@"test" forState:UIControlStateNormal];
myButton.frame = CGRectMake(0, 0, self.leftScrollView.frame.size.width, 50);

UIImageView *myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"gear12.png"]];

[myButton addSubview:myImageView];
[self.leftScrollView addSubview:myButton];

更新:

好的,我注意到只有当它在我的滚动视图中时才会产生这种效果。如果我将它添加到视图中,则没有阴影效果。

顶部测试按钮,该按钮是视图的子视图。底部按钮是滚动视图的子视图,它是视图的子视图(按钮/视图与按钮/滚动视图/视图)。

白色部分是视图,灰色部分是滚动视图/视图。

更新 2:

正如 robmayor 所指出的,UIButtons 总是具有双线效果,只是在背景颜色为白色时不明显。蓝色是视图,灰色是子视图滚动视图。

【问题讨论】:

标签: iphone objective-c ios


【解决方案1】:

这个问题很旧(6 个月),但我找到了一个解决方案来删除/掩盖双线的这种不良影响。

[yourButton.layer setBackgroundColor: [[UIColor blackColor]CGColor]];
[yourButton.layer setBorderWidth:1.0f];
[yourButton.layer setBorderColor:[[UIColor blackColor]CGColor]];
[yourButton.layer setShadowOpacity:0.1f];
[yourButton.layer setCornerRadius:10];

选择的 UIColor 取决于视图的当前背景。

结果:

【讨论】:

  • 这会在按钮中创建一个黑色边框。工作得更好,但不要删除线。
  • 这太完美了! (虽然,我不确定是否需要设置背景颜色或阴影不透明度。)
【解决方案2】:

在 iPad 上,圆角矩形 UIButton 始终沿其底部边缘绘制一条白线。如果按钮的超级视图是白色的,则看不到那条白线,但它仍然存在。

你有几个选择:

  • 将超级视图设为白色。这是最简单的,但您可能不喜欢它的外观。

  • 在您最喜欢的图像编辑器中制作一些圆角矩形图像。将按钮类型设置为自定义,并将圆角矩形图像设置为按钮的图像。

  • 创建 UIButton 的子类并覆盖其drawRect: 方法。

  • 将按钮类型设置为自定义并使用按钮的图层属性(button.layer.backgroundColorbutton.layer.borderColorbutton.layer.borderWidthbutton.layer.cornerRadius)为按钮提供圆角矩形外观。如果您希望它像普通按钮一样变成蓝色,则必须在触摸按钮时更新button.layer.backgroundColor。 (其实正常的使用蓝色渐变。)

【讨论】:

  • 这苹果有点傻。使添加一个简单的按钮比它需要的更复杂。谢谢。
  • 似乎圆角矩形按钮实际上被绘制为单个分组样式的 UITableViewCell ,因此继承了底部的白色边框。这个白色边框非常适合标准分组样式表格背景上的底部单元格。但对 Apple 而言,将按钮设为相同的绘图代码是一个糟糕的选择。
【解决方案3】:

[UIButton buttonWithType:UIButtonTypeRoundedRect] 替换为:

UIButton *myButton = [UIButton new];

或:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];

您希望拥有自定义按钮。如果需要,您仍然可以制作圆角。

【讨论】:

  • 为什么会有不同?圆角矩形按钮通常不会像这样画两次。更有可能是 OP 不小心在大致相同的位置绘制了两个按钮。
  • 我现在只在我的代码中添加单个按钮。我用添加的信息更新了我的问题。第二张图片,我只是在 IB 中拖动按钮。
  • @matt,圆角矩形按钮绝对是这样画的。在 IB 中自己检查是很简单的。
  • 好的...我现在同意。看起来按钮被添加了两次。 @rob mayoff:不,他们没有。我刚刚检查了:)
  • @robmayoff 但为什么要这样做,我怎么能不让它画出阴影效果呢?
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 2016-08-17
  • 2022-01-21
  • 1970-01-01
  • 2020-06-06
  • 2020-10-05
  • 1970-01-01
  • 2015-12-04
相关资源
最近更新 更多