button应该说大家都很熟悉,在初学的时候,咱们常常会发现一个问题:在设置image的时候如果同时设置title,则”不能“同时显示出来,除非设置BKimage。那么这是怎么回事呢,下面我们一起做如下测试:
我现在随意截取一张img,如下是图片的原图,
获取到他的高度和宽度:
UIImage *img = [UIImageimageNamed:@"1"];
CGFloat wide =CGImageGetWidth(img.CGImage); //img的宽度
CGFloat height = CGImageGetHeight(img.CGImage);//img的宽度
NSLog(@"w:%.2f h:%.2f",wide,height);
得到图片的宽高分别是:158和112。
情况一:我在按钮上设置img和title,并且按钮的宽度小于img的宽度:
//代码如下:
UIButton *button = [UIButtonbuttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(120,220, 100, 90);
button.backgroundColor = [UIColorredColor];
button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 9, 0);
[button setImage:img forState:UIControlStateNormal];
[button setTitle:@"这是一个标题"forState:UIControlStateNormal];
[self.view addSubview:button];
得到的图片结果如下:
咱们不难发现图片被压缩了,当然title也没有显示
情况二:按钮的宽度稍大img的宽度
button.frame =CGRectMake(120,220,220,90);
出现的结果如下:
此时图片按照原来的大小显示,但是标题没有显示全,那么咱们应该知道以前为什么说设置了图片和title为什么不会同时显示了,咱们如果将button的宽度设置的足够大(button的宽度>=img的宽度+title的宽度)则img和标题完全可以都显示。
情况三:button的宽度>=img的宽度+title的宽度
出现如下的情况:
标题和img都显示出来了,并且img显示在左侧,title显示在右侧,并且中间没有空隙。
至此也说明了其中的原由,那么如果我们想设置一种上侧显示img,下侧显示title的按钮,则这种样式是满足不了的,那么此时就用到UIEdgeInserts响应知识了。