[iOS]UIButton同时添加image和title后子视图位置管理

来源:互联网 发布:mac dps文件怎么打开 编辑:程序博客网 时间:2024/05/29 00:34

[iOS]UIButton同时添加image和title后子视图位置管理

本文产生原因:

自定义TableBar时,一般需要给Button设置Image和Title,以便改变点击效果及调用响应方法。

- (void)viewDidLoad {    [super viewDidLoad];    /**     UIEdgeInsets insets = {top, left, bottom, right};     top    距可变区域顶部的距离     left   距可变区域左侧的距离     bottom 距可变区域底部的距离     right  距可变区域右侧的距离     */    // 赋值    [_funBut setImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal];    [_funBut setTitle:@"首页非常长的一串字符串这里测试就随便添加了一段描述了不要介意" forState:UIControlStateNormal];    [_funBut.titleLabel setNumberOfLines:0];    [_funBut setTitleColor:[UIColor colorWithRed:116/255.0 green:116/255.0 blue:116/255.0 alpha:1] forState:UIControlStateHighlighted];    // 1.默认位置    [_funBut setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];    [_funBut setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];    // 2.居中位置    [_funBut setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -_funBut.titleLabel.intrinsicContentSize.width)];    [_funBut setTitleEdgeInsets:UIEdgeInsetsMake(0, -_funBut.currentImage.size.width, 0, 0)];    // 3.需求位置    [_funBut setImageEdgeInsets:UIEdgeInsetsMake(-_funBut.titleLabel.intrinsicContentSize.height, 0, 0, -_funBut.titleLabel.intrinsicContentSize.width)];    [_funBut setTitleEdgeInsets:UIEdgeInsetsMake(0, -_funBut.currentImage.size.width, -_funBut.currentImage.size.height, 0)];} 
上面使用的切片大小是200x200,效果参照图1、图2、图3、图4。

下面再提供一个方法在不是真的情况下改变image的size,效果如图5。

- (void)viewDidLoad {    [super viewDidLoad];    // 赋值    UIImage *image = [UIImage imageNamed:@"email.png"];    [_funBut setImage:[self originImage:image scaleToSize:CGSizeMake(30, 30)] forState:UIControlStateNormal];        [_funBut setTitle:@"一串字符串" forState:UIControlStateNormal];    [_funBut.titleLabel setNumberOfLines:0];    [_funBut setTitleColor:[UIColor colorWithRed:116/255.0 green:116/255.0 blue:116/255.0 alpha:1] forState:UIControlStateHighlighted];    // 1.默认位置    [_funBut setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];    [_funBut setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];    // 2.居中位置    [_funBut setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -_funBut.titleLabel.intrinsicContentSize.width)];    [_funBut setTitleEdgeInsets:UIEdgeInsetsMake(0, -_funBut.currentImage.size.width, 0, 0)];    // 3.需求位置    [_funBut setImageEdgeInsets:UIEdgeInsetsMake(-_funBut.titleLabel.intrinsicContentSize.height, 0, 0, -_funBut.titleLabel.intrinsicContentSize.width)];    [_funBut setTitleEdgeInsets:UIEdgeInsetsMake(0, -_funBut.currentImage.size.width, -_funBut.currentImage.size.height, 0)];}/** * 压缩图片 * image:将要压缩的图片  * size: 压缩后的尺寸 */- (UIImage*)originImage:(UIImage *)image scaleToSize:(CGSize)size {    // 参数一:区域大小,参数二:是否是非透明,参数三:屏幕密度;    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return scaledImage;} 

示意图:

灰色区域为button的frame

1.默认位置


2.居中位置


3.需求位置


4.点击效果

5.按比例改变image大小后的点击效果:


0 0
原创粉丝点击