我有一个自定义UIButton如下:
UIButton * action = [UIButton buttonWithType:UIButtonTypeCustom];
[action setSize:CGSizeMake(30, 30)];
[action setBackgroundImage:[UIImage imageNamed:@"contextaction.png"] forState:UIControlStateNormal];
[action setContentMode:UIViewContentModeCenter];
[action addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
我拥有的真实图像实际上是以10x10为中心,居中,我希望它保持这种状态而不是缩放到按钮大小。我该怎么做?
修订后的代码:
UIButton * action = [UIButton buttonWithType:UIButtonTypeCustom];
[action setSize:CGSizeMake(44, 44)];
[action setImage:[UIImage imageNamed:@"contextaction.png"] forState:UIControlStateNormal];
[action addTarget:self action:@selector(actionButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
if (IS_IPAD){
action.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
action.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
}
actionButton_ = [[UIBarButtonItem alloc] initWithCustomView:action];
仍在缩放
答案 0 :(得分:2)
使用setImage:forState:
代替UIButton
setBackgroundImage:forState:
方法
UIButton
继承自UIControl
,因此您可以将contentHorizontalAlignment
和contentVerticalAlignment
属性分别设置为UIControlContentHorizontalAlignmentCenter
和UIControlContentVerticalAlignmentCenter
(尽管在大多数情况下这些都是默认值。)
答案 1 :(得分:2)
为此我认为你需要使用图像insets属性UIButton Class Reference
答案 2 :(得分:2)
Swift 3的工作示例希望它有所帮助
import UIKit
@IBDesignable
class MenuBtn: UIButton {
convenience init() {
self.init(frame: CGRect.zero)
}
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
func setupView(){
imageView?.contentMode = .scaleAspectFit
var image = imageView?.image
image = image?.withRenderingMode(.alwaysTemplate)
}
override var isSelected: Bool {
didSet {
tintColor = super.isSelected ? .gray : .gray
}
}
override func imageRect(forContentRect contentRect: CGRect) -> CGRect {
let leftMargin:CGFloat = 40
let imgWidth:CGFloat = 24
let imgHeight:CGFloat = 24
return CGRect(x: leftMargin, y: (contentRect.size.height-imgHeight) * 0.5, width: imgWidth, height: imgHeight)
}
override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
let leftMargin:CGFloat = 80
let rightMargin:CGFloat = 80
return CGRect(x: leftMargin, y: 0, width: contentRect.size.width-leftMargin-rightMargin, height: contentRect.size.height)
}
override func backgroundRect(forBounds bounds: CGRect) -> CGRect {
let leftMargin:CGFloat = 10
let rightMargin:CGFloat = 10
let topMargin:CGFloat = 10
let bottomMargin:CGFloat = 10
return CGRect(x: leftMargin, y: topMargin, width: bounds.size.width-leftMargin-rightMargin, height: bounds.size.height-topMargin-bottomMargin)
}
override func contentRect(forBounds bounds: CGRect) -> CGRect {
let leftMargin:CGFloat = 5
let rightMargin:CGFloat = 5
let topMargin:CGFloat = 5
let bottomMargin:CGFloat = 5
return CGRect(x: leftMargin, y: topMargin, width: bounds.size.width-leftMargin-rightMargin, height: bounds.size.height-topMargin-bottomMargin)
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupView()
}
}
答案 3 :(得分:1)
可以尝试这样的事情......
[button addSubview:imageView];
其中imageView包含图像;
答案 4 :(得分:0)
使用setContentMode
[action setContentMode:UIViewContentModeCenter];
答案 5 :(得分:0)
包含QuartzCore框架并更改图层上的重力。
action.layer.contentsGravity=kCAGravityCenter;