有没有办法为UIButton
的背景图片添加某种偏移?
我为UIButton
提供了一些自定义背景图片。这些图像在有效按钮区域周围有5像素阴影区域。当我使用这些图像时,我必须移动标题标签,调整框架并进行一些计算以正确放置按钮。
理想情况下,我想在该图像(或UIButton
)上设置类似偏移(x = -5px,y = -5px)的内容,以便在分配时图像作为UIButton的背景,它被水平和垂直移动。
在html中,我会在按钮div上设置固定大小,然后通过指定背景位置偏移背景图像。
iOS有类似内容吗?
答案 0 :(得分:13)
设置setTitleEdgeInsets:
或setImageEdgeInsets:
似乎对UIButton
的背景图片没有任何影响,但仅限于图片(和标题)。
我最终覆盖了-(CGRect)backgroundRectForBounds:(CGRect)bounds
,其中我按照所需的金额(在我的情况下为5)给边界矩形充气。
答案 1 :(得分:12)
这是一个老问题,但我认为答案可能更好。一种方法是获取按钮,然后抓住它的图像。所以,如果你在IB中设置按钮,它可能在objc中看起来像这样:
UIImage *i = [self.button backgroundImageForState:UIControlStateNormal];
如果你在代码中做到了,那么你已经拥有了这些东西!
然后你想设置你的对齐矩形来调整差异。
i = [i imageWithAlignmentRectInsets:UIEdgeInsetsMake(0, 0, -5, -5)];
(上,左,下,右)。
现在重新设置按钮图像。
[self.button setBackgroundImage:i forState:UIControlStateNormal];
自动布局使用对齐方式来排列。您可能需要更改对齐上的某些常量以进行微调。
答案 2 :(得分:2)
刚刚更新SmileBot答案:
以编程方式创建一个按钮(在我的例子中是一个UIBarButtonItem)并设置其背景图像的偏移量(顶边+2 px):
let image = UIImage(named: "yourimagename")!.withAlignmentRectInsets(UIEdgeInsetsMake(2, 0, 0, 0))
let button = UIButton(type: .custom)
button.frame = CGRect(x: 0.0, y: 0.0, width: image.size.width, height: image.size.height)
button.setBackgroundImage(image, for: UIControlState())
答案 3 :(得分:1)
在UIbuton的属性检查器中,您可以设置标题/图像插入值。
答案 4 :(得分:1)
您可以同时使用setTitleEdgeInsets:
和setImageEdgeInsets:
来获得所需的结果。
答案 5 :(得分:0)
尝试使用偏移量
[buttonName setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 12.0, 0.0, 0.0)];