1.UIButton背景图的拉伸方法
方法一:
- (UIImage *)resizeImgWithName:(UIImage *)image
{
//第一个参数:设置受保护区域,只有在间距范围交集的内容才能进行相应的拉伸和平铺,意味着要保护四个角点
//第二个参数:图片是进行拉伸还是平铺:UIImageResizingModeStretch:拉伸
此处用UIImageResizingModeTile会出现多余的线
UIImageResizingModeStretch效果更好
return [image resizableImageWithCapInsets:UIEdgeInsetsMake(30, 25, 20, 30) resizingMode:UIImageResizingModeTile];
}
方法二:
//选择图片的正中间进行拉伸
imageNormal = [imageNormal stretchableImageWithLeftCapWidth:imageNormal.size.width*0.5 topCapHeight:imageNormal.size.height*0.5];
2.自定义button内部的label和ImageView的位置
方法一:
/**
* 返回按钮图片(不是背景图片)的位置
*/
- (CGRect)imageRectForContentRect:(CGRect)contentRect {
// 获得图片的宽度
CGFloat imageW = self.imageSize.width;
CGFloat imageH = imageW;
// 计算titleLabel的x值
CGFloat labelX = (contentRect.size.width - self.labelW - imageW - 5) * 0.5;
CGFloat imageX = labelX + self.labelW + 5;
CGFloat imageY = (contentRect.size.height - imageH) * 0.5;
return CGRectMake(imageX, imageY, imageW, imageH);
}
/**
* 返回按钮文字的位置
*/
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
// 获得按钮的宽高
CGFloat buttonW = contentRect.size.width;
CGFloat buttonH = contentRect.size.height;
// 获得图片的宽度
CGFloat imageW = self.imageSize.width;
// 计算titleLabel的x值
CGFloat labelX = (buttonW - self.labelW - imageW - 5) * 0.5;
return CGRectMake(labelX, 0, self.labelW , buttonH);
}
方法二:
- (void)layoutSubviews {
[super layoutSubviews];
// 获得按钮的宽高
CGFloat buttonW = self.frame.size.width;
CGFloat buttonH = self.frame.size.height;
// 获得图片的宽度
CGFloat imageW = self.imageView.frame.size.width;
CGFloat imageH = self.imageView.frame.size.height;
// 按钮和图片之间的间接
CGFloat margin = 5;
// 再调整图片和titleLabel的位置
CGFloat labelW = self.titleLabel.frame.size.width;
// 计算label的x值
CGFloat labelX = (buttonW - labelW - margin - imageW) * 0.5;
self.titleLabel.frame = CGRectMake(labelX, 0, labelW, buttonH);
self.imageView.frame = CGRectMake(CGRectGetMaxX(self.titleLabel.frame) + margin, (buttonH - imageH) * 0.5, imageW, imageH);
}