博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIButton如何正确调整imageView及titleLabel的位置
阅读量:6087 次
发布时间:2019-06-20

本文共 2725 字,大约阅读时间需要 9 分钟。

hot3.png

   UIImage *buttonImage = [UIImage imageNamed:@"daifukuan-ico"];

    

    CGFloat buttonImageViewWidth = CGImageGetWidth(buttonImage.CGImage);

    

    CGFloat buttonImageViewHeight = CGImageGetWidth(buttonImage.CGImage);

    

    if ([UIScreen mainScreen].scale == 2.0f) {// iOS 4.0+

        

        buttonImageViewWidth *= 0.8f;

        

        buttonImageViewHeight *= 0.8f;

        

    }

    

    NSString *buttonTitle = @"中华人";

    

    UIFont *buttonTitleFont = [UIFont systemFontOfSize:14.0f];

    

    CGSize buttonTitleLabelSize = [buttonTitle sizeWithFont:buttonTitleFont];

    

    // button宽度,至少为imageView宽度与titleLabel宽度之和

    

    CGFloat buttonWidth = buttonImageViewWidth + buttonTitleLabelSize.width;

    

    // button高度,至少为imageView高度与titleLabel高度之和

    

    CGFloat buttonHeight = buttonImageViewHeight + buttonTitleLabelSize.height;

    

    

    

    UIButton *b = [[UIButton alloc] init];

    

    [b setCenter:CGPointMake(140, 140)];

    

    [b setBounds:CGRectMake(0, 0, 90, buttonHeight)];

    

    [b.titleLabel setFont:buttonTitleFont];

    

    [b setBackgroundColor:[UIColor redColor]];

    

    

    

    [b setImage:buttonImage forState:UIControlStateNormal];

    

//    [b.imageView setBackgroundColor:[UIColor greenColor]];

    

    

    

    [b setTitle:buttonTitle forState:UIControlStateNormal];

    

    [b setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    

    [b setTitleColor:[UIColor scrollViewTexturedBackgroundColor] forState:UIControlStateHighlighted];

    

    [b.titleLabel setBackgroundColor:[UIColor whiteColor]];

    

    

    

    [self.view addSubview:b];

    

    

    

    CGPoint buttonBoundsCenter = CGPointMake(CGRectGetMidX(b.bounds), CGRectGetMidY(b.bounds));

    

    // 找出imageView最终的center

    

    CGPoint endImageViewCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetMidY(b.imageView.bounds));

    

    // 找出titleLabel最终的center

    

    CGPoint endTitleLabelCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetHeight(b.bounds)-CGRectGetMidY(b.titleLabel.bounds));

    

    // 取得imageView最初的center

    

    CGPoint startImageViewCenter = b.imageView.center;

    

    // 取得titleLabel最初的center

    

    CGPoint startTitleLabelCenter = b.titleLabel.center;

    

    // 设置imageEdgeInsets

    

    CGFloat imageEdgeInsetsTop = endImageViewCenter.y - startImageViewCenter.y;

    

    CGFloat imageEdgeInsetsLeft = endImageViewCenter.x - startImageViewCenter.x;

    

    CGFloat imageEdgeInsetsBottom = -imageEdgeInsetsTop;

    

    CGFloat imageEdgeInsetsRight = -imageEdgeInsetsLeft;

    

    b.imageEdgeInsets = UIEdgeInsetsMake(imageEdgeInsetsTop, imageEdgeInsetsLeft, imageEdgeInsetsBottom, imageEdgeInsetsRight);

    

    // 设置titleEdgeInsets

    

    CGFloat titleEdgeInsetsTop = endTitleLabelCenter.y-startTitleLabelCenter.y;

    

    CGFloat titleEdgeInsetsLeft = endTitleLabelCenter.x - startTitleLabelCenter.x;

    

    CGFloat titleEdgeInsetsBottom = -titleEdgeInsetsTop;

    

    CGFloat titleEdgeInsetsRight = -titleEdgeInsetsLeft;

    

    b.titleEdgeInsets = UIEdgeInsetsMake(titleEdgeInsetsTop, titleEdgeInsetsLeft, titleEdgeInsetsBottom, titleEdgeInsetsRight);

 

转载于:https://my.oschina.net/itcastBlogs/blog/745845

你可能感兴趣的文章
Fire Game
查看>>
base64编码解码
查看>>
java基础讲解06-----字符串
查看>>
会计的思考(44):史上最富有的会计--洛克菲勒的会计视角
查看>>
宏的写法和特点
查看>>
OC门的工作原理
查看>>
《Spring1之第八次站立会议》
查看>>
关于mysql的初步学习 (一)
查看>>
VB6在win10下的使用经验
查看>>
DB2数据库中得到当前年月日,时分秒的语句
查看>>
IOS第三方地图-百度地图集成
查看>>
swift学习网站
查看>>
DocumentFragments
查看>>
HTTP-web-Internet
查看>>
【 D3.js 入门系列 — 4 】 如何使用比例尺( scale )
查看>>
Android优化后的定时器代码
查看>>
Html.RenderPartial("")与Html.Partial("")区别
查看>>
poj2524 Ubiquitous Religions(并查集)
查看>>
POJ 1905, Expanding Rods
查看>>
微信内移动前端开发抓包调试工具fiddler使用教程
查看>>