第一种方法
首先获取button上的titleLabel和imageView的宽和高,
imageView的宽高:
CGFloat imageWith = self.imageView.frame.size.width;
CGFloat imageHeight = self.imageView.frame.size.height;
当然也可以通过这种方法获取imageView的大小
CGFloat imageWidth = CGImageGetWidth([UIImage imageNamed:@"driving"].CGImage);
CGFloat imageHeight = CGImageGetHeight([UIImage imageNamed:@"driving"].CGImage);
不过需要注意的是需要辨别获取的图片是一倍图,还是二倍图亦或者三倍图,然后用imageWidth和imageHeigt除以倍数
titleLabel的宽高:
CGFloat labelWidth = 0.0;
CGFloat labelHeight = 0.0;
if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
// 由于iOS8中titleLabel的size为0,用下面的这种设置
labelWidth = self.titleLabel.intrinsicContentSize.width;
labelHeight = self.titleLabel.intrinsicContentSize.height;
} else {
labelWidth = self.titleLabel.frame.size.width;
labelHeight = self.titleLabel.frame.size.height;
}
然后设置button的imageEdgeInsets和labelEdgeInsets属性
1.image在上,label在下
imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);
labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0, 0);
2.image在左,label在右
imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
3.image在下,label在上
imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);
labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, 0, 0);
4.image在右,label在左
imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0);
labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith-space/2.0, 0, imageWith+space/2.0);
第二种
通过自定义button,重写button的以下两个方法
-(CGRect)titleRectForContentRect:(CGRect)contentRect;
-(CGRect)imageRectForContentRect:(CGRect)contentRect;
这里面你可以随意设置titleLabel和imageView的位置
第三种
创建Button的时候使用UIButton *selectedButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 100, 100, 30)];来创建,然后把你需要添加的titleLabel或者imageView作为子视图添加到button上,但是苹果官方更推荐使用buttonWithType,因为这个是唯一一个设置buttonType的地方,并且这个方法正在MRC中可以自动释放button,而initWithFrame需要手动释放.
网友评论