UIButton,送给多数开发者的释疑文章,关于如何正确调整imageView及titleLabel的位置

iOS 自定义UIButton UIButton的默认布局是:title在右,image在左; 很多时候我们需要的是title在左边,或者title在下面,这时就需要调整UIButton的TitleLabel和ImageView的位置了,查了很多资料,要么零零散散的介绍,要么就是特别复杂的实现;经过一段时间的学习,在这里总结一下实现的方式; 一种是设置UIButton的以下两个属性:@property(nonatomic) U 阅读详情

一些开发者知道通过imageEdgeInsets及titleEdgeInsets可以调整imageView及titleLabel的位置,但不知道如何正确计算,基本上都是通过多次调整相应的值达到期望的目标(次数过多可能会失去信心),究其原因就是不能正确理解imageEdgeInsets及titleEdgeInsets.

下面步入主题.

如果button的bounds足够大(宽度至少是imageView宽度与titleLabel宽度之和,高度至少为imageView高度与titleLabel高度中的最大值),那么就可以同时显示imageView及titleLabel,如下图:

如果,想要得到imageView及titleLabel都居中显示,且要达到imageView在上,titleLabel在下的效果(通过设置imageView及titleLabel的frame是无法达到这样的效果的),如下图:

此时,button的bounds也要足够大(宽度至少是imageView宽度与titleLabel宽度之和,高度至少为imageView高度与titleLabel高度之和),并且,需要修改button的imageEdgeInsets及titleEdgeInsets.可参考下面的代码:

复制代码
 1 // 这里的图片,必须有Xcode.png及Xcode@2x.png,便于得到正确的以设备点为单位的宽度及高度
 2 UIImage *buttonImage = [UIImage imageNamed:@"Xcode"];
 3 CGFloat buttonImageViewWidth = CGImageGetWidth(buttonImage.CGImage);
 4 CGFloat buttonImageViewHeight = CGImageGetWidth(buttonImage.CGImage);
 5 if ([UIScreen mainScreen].scale == 2.0f) {// iOS 4.0+
 6     buttonImageViewWidth *= 0.5f;
 7     buttonImageViewHeight *= 0.5f;
 8 }
 9 NSString *buttonTitle = @"中华人民共和国";
10 UIFont *buttonTitleFont = [UIFont systemFontOfSize:17.0f];
11 CGSize buttonTitleLabelSize = [buttonTitle sizeWithFont:buttonTitleFont];
12 // button宽度,至少为imageView宽度与titleLabel宽度之和
13 CGFloat buttonWidth = buttonImageViewWidth + buttonTitleLabelSize.width;
14 // button高度,至少为imageView高度与titleLabel高度之和
15 CGFloat buttonHeight = buttonImageViewHeight + buttonTitleLabelSize.height;
16 
17 UIButton *b = [[UIButton alloc] init];
18 [b setCenter:CGPointMake(160, 160)];
19 [b setBounds:CGRectMake(0, 0, buttonWidth, buttonHeight)];
20 [b.titleLabel setFont:buttonTitleFont];
21 [b setBackgroundColor:[UIColor redColor]];
22 
23 [b setImage:buttonImage forState:UIControlStateNormal];
24 [b.imageView setBackgroundColor:[UIColor greenColor]];
25 
26 [b setTitle:buttonTitle forState:UIControlStateNormal];
27 [b setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
28 [b setTitleColor:[UIColor scrollViewTexturedBackgroundColor] forState:UIControlStateHighlighted];
29 [b.titleLabel setBackgroundColor:[UIColor whiteColor]];
30 
31 [self.view addSubview:b];
32 
33 CGPoint buttonBoundsCenter = CGPointMake(CGRectGetMidX(b.bounds), CGRectGetMidY(b.bounds));
34 // 找出imageView最终的center
35 CGPoint endImageViewCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetMidY(b.imageView.bounds));
36 // 找出titleLabel最终的center
37 CGPoint endTitleLabelCenter = CGPointMake(buttonBoundsCenter.x, CGRectGetHeight(b.bounds)-CGRectGetMidY(b.titleLabel.bounds));
38 // 取得imageView最初的center
39 CGPoint startImageViewCenter = b.imageView.center;
40 // 取得titleLabel最初的center
41 CGPoint startTitleLabelCenter = b.titleLabel.center;
42 // 设置imageEdgeInsets
43 CGFloat imageEdgeInsetsTop = endImageViewCenter.y - startImageViewCenter.y;
44 CGFloat imageEdgeInsetsLeft = endImageViewCenter.x - startImageViewCenter.x;
45 CGFloat imageEdgeInsetsBottom = -imageEdgeInsetsTop;
46 CGFloat imageEdgeInsetsRight = -imageEdgeInsetsLeft;
47 b.imageEdgeInsets = UIEdgeInsetsMake(imageEdgeInsetsTop, imageEdgeInsetsLeft, imageEdgeInsetsBottom, imageEdgeInsetsRight);
48 // 设置titleEdgeInsets
49 CGFloat titleEdgeInsetsTop = endTitleLabelCenter.y-startTitleLabelCenter.y;
50 CGFloat titleEdgeInsetsLeft = endTitleLabelCenter.x - startTitleLabelCenter.x;
51 CGFloat titleEdgeInsetsBottom = -titleEdgeInsetsTop;
52 CGFloat titleEdgeInsetsRight = -titleEdgeInsetsLeft;
53 b.titleEdgeInsets = UIEdgeInsetsMake(titleEdgeInsetsTop, titleEdgeInsetsLeft, titleEdgeInsetsBottom, titleEdgeInsetsRight);
54 
55 [b release];
从大疆智图到Cesium:3D Tiles模型加载与Web三维场景构建实战 本文详细介绍了如何利用大疆智图生成3D Tiles数据,并通过Cesium在Web端实现高效加载与三维场景构建。从大疆智图参数设置到Cesium环境配置,再到3D Tiles性能调优与高级功能实现,提供了一套完整的实战指南,帮助开发者快速掌握3D Tiles模型加载与Web三维场景构建技术。 阅读详情

相关推荐

RK3588交叉编译实战:从环境搭建到程序部署

本文详细介绍了在X86主机上为RK3588开发板搭建交叉编译环境的完整流程。从获取ARM工具链、配置sysroot,到实战编译Hello World和Qt应用程序,并提供了部署方法和常见问题解决方案。通过交叉编译,开发者可以在高性能PC上高效开发,并在ARM架构的RK3588上运行程序,大幅提升嵌入式开发效率。

weixin_29191669的博客 274

java的setbounds_Java Label.setBounds方法代码示例

import java.awt.Label; //导入方法依赖的package包/类Database(){setSize(500,580);setVisible(true);setLayout(null);setTitle("Students Record");setResizable(false);Font fn=new Font("Georgia",Font.BOLD,12);setFont(...

weixin_33648177的博客 883

WIFI 相关的频偏调试以及天线调试记录

WIFI RF 相关的频偏调试以及天线调试 1,频率误差(Frequency Error) 频率误差(Frequency Error):表征射频信号偏离该信号所处信道中心频率的大小,单位PPM。频偏误差要求范围如下表。 频偏越小越好。PPM的计算公式如下: 问题: 我们ESP8089认证测试的时候频偏测试超了。需要修改哪些呢。 测试频率点在2.411865385GHz 宣称点:2.412GHz 频率偏移计算:{(2.412GHz-2.411865385GHz)÷2...

armkits的博客 1万+

格而知之1:UIButton中imageView和titleLabel的位置调整

在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸。在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然后两者紧挨在一起构成组合居中显示。如下图:         我们可以使用setImageEdgeInsets:和setTitleEdgeInsets:方法来调整两者的位置。在使用这两

杨淳引的博客 3623

Hexo博客使用PDF.js

clone了一个pdf.js 然后兴高采烈地到文章里使用{% pdf %}标签 结果浏览器弹出了个下载框(使用GitHub的raw) 不知道是不是因为使用GitHub的原因导致这个问题 后来我测试的时候报了个错 优快云上的解决方法 到时候我再试试把资源放回lib/里面看看行不行 目录1.clone1.1.官方方法1.2.NexT主题方法1.3.补充2.修改文件2.1.修改viewer.htm...

LTFan 961

【MM小贴士】关于SAP系统中关税的处理方式

的运费,这部分来讲,我们关税的计价基础,就应该是货物价值+包邮到中国港口的运费,完后进行报关操作,缴纳关税,后半段从中国港口拉回到企业里面的运输费,就会做到费用里面去,而不是计入到存货成本。1、我们自己的企业和国外厂家A购买一项物资,厂家A的报价会分成几个组成部分货物本身的价值或者货物本身的价值+到国外港口的运费或者货物本身的价值+到中国港口的运费或者货物本身的价值+包邮到你们自己企业的整体运费。所以我的关税就是不确定的。重点是运费是哪一段的运费,如何结算,结算的货币,何时能够确定运费。.........

竹大的博客 9021

UIButton如何正确调整imageView及titleLabel的位置

一些开发者知道通过imageEdgeInsets及titleEdgeInsets可以调整imageView及titleLabel的位置,但不知道如何正确计算,基本上都是通过多次调整相应的值达到期望的目标(次数过多可能会失去信心),究其原因就是不能正确理解imageEdgeInsets及titleEdgeInsets. 下面步入主题. 如果button的bounds足够大(宽度至少是im

xuxunno1的专栏 824

告别盲调!用Synopsys VIP搭建PCIe 5.0验证环境,手把手搞定链路训练与均衡调试

本文详细介绍了基于Synopsys VIP搭建PCIe 5.0验证环境的实战指南,重点解析了链路训练(LTSSM)与均衡调试的关键技术。通过配置VIP组件、设计验证平台架构及实战调试技巧,帮助工程师高效解决PCIe 5.0验证中的常见问题,提升芯片验证效率与可靠性。

weixin_28700411的博客 456

UIButton中imageView和titleLabel的位置调整

在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸。在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然后两者紧挨在一起构成组合居中显示。如下图:         我们可以使用setImageEdgeInsets:和setTitleEdgeInsets:方法来调整两者的位置。在使用这两

Liangyc0129的博客 2997

node-red 可视化探索

配置socket选择配置流程产生url。

weixin_44133581的博客 3411

电机控制基础,小白入门篇

电机,这个藏在风扇、电动车、机器人里的“动力心脏”,如何精准控制它的转速、方向甚至力量?这篇博客专为完全零基础的小白打造,用“说人话”的方式拆解电机控制的底层逻辑,帮你从“看不懂电路图”到“能调个简单电机”。 电机控制不是“大神专属”,只要掌握“电生磁、磁生力”的底层逻辑,加上动手实践,小白也能快速入门。这篇博客会陪你从“看电机转”到“让电机听话”,把复杂的控制原理变成能上手玩的“小实验”。准备好你的面包板和电机,我们一起开启“电控之旅”吧!

汽车电子软件领域知识分享 5586

Xib中调整button的imageView和TitleLabel的位置

一、Xib中调整button的imageView和TitleLabel的位置 调整imageView:(红色矩形区域) 调整TitleLabel:(红色矩形区域) 调整 整体内容:(红色矩形区域)

程序员日常记录 1万+

使用R包PreMSIm预测微卫星不稳定的标题:基于基因表达量的微卫星不稳定性预测

在本文中,我们将介绍如何使用R语言中的PreMSIm包来根据基因表达量进行微卫星不稳定性的预测。需要注意的是,本文仅介绍了使用PreMSIm包进行微卫星不稳定性预测的基本流程和代码示例。在实际应用中,还需要考虑数据的质量控制、模型优化以及结果的解释和验证等因素,以确保预测结果的准确性和可靠性。预测结果将返回一个包含微卫星不稳定性指数的向量,其中每个元素对应一个样本的预测结果。在有了输入数据后,我们可以使用PreMSIm包中的函数进行微卫星不稳定性的预测。函数生成一个包含所有样本的微卫星不稳定性信息的表格。

2301_79330511的博客 382

iOS UIButton如何正确调整imageView及titleLabel的位置

一些开发者知道通过imageEdgeInsets及titleEdgeInsets可以调整imageView及titleLabel的位置,但不知道如何正确计算,基本上都是通过多次调整相应的值达到期望的目标(次数过多可能会失去信心),究其原因就是不能正确理解imageEdgeInsets及titleEdgeInsets. 下面步入主题. 如果button的bounds足够大(宽度至少是im

u010856537的专栏 1176

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

编辑UIButton的titleLabel和imageView的位置

UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局。 如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是能试出来的,但是如果改变了图片大小或文字长度,又要再来一遍。 作为程序猿,我们不应该放弃任何一个偷懒的机会。 默认情况下,是图片在左,文字在右,垂直居中显示,如下图: button

u011096206的专栏 761

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

自定义按钮的 imageView 和 titleLabel 的位置

#pragma mark - 设置按钮内的 imageView 和 titleLabel 的frame (就是重写按钮的titleRectForContentRect: 和 titleRectForContentRect:)这个类是继承自 UIButton 的 所以可以重写这两个方法 // - 方案1.重写按钮的titleRectForContentRect: 和 title

Coder 824

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

UIButton 调整title和image的位置

想深入了解 UIButton 的image 和 titleLabel的关系必须知道的原理 (1) Button有两个属性:titleEdgeInsets和imageEdgeInsets,通过设置这两个,就可以实现所有需要的Button的样式,如:image在上、image在下、image在左、image在右。 (2) titleEdgeInsets是ti

CJXBShowZhouyujuan的博客 933

设置UIButton中titleLabel和ImageView的位置

最近做的项目中遇到怎么设置UIButton里面的titleLable和ImageView的问题,和大家分享下 self.titleButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; //contentHorizontalAlignment 按钮中titleLabel的水平方向的布

HR_0101的博客 677

在UIButton中如何将imageView和titleView居中且上下分布

在UIButton中如何将imageView和titleView居中且上下分布 1.首先我们向button中添加图片设置文字//创建一个button    UIButton *btn = [[UIButton alloc] init];    [self.view addSubview:btn];    btn.frame = CGRectMake(100, 200, 90, 90);    b

7761

ios开发之--UIButton中imageView和titleLabel的位置调整

在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸。在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然后两者紧挨在一起构成组合居中显示。 如下图: 我们可以使用setImageEdgeInsets:和setTitleEdgeInsets:方法来调整两者的位置。在使用这两个方法之前,我们首先要将...

weixin_33812433的博客 195

根据字符串内容计算宽高、UIButton imageView 和 titleLabel 通过偏移量交互位置

1.根据字符串内容计算宽高 - (CGFloat)strRowWidth:(NSString *)string { //宽度     NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:15]};      CGRect rect = [string boundingRectWithSize:CG

sun261480188的博客 273

调整UIButton中的imageView和titleLabel的相对位置

UIButton中默认图片在左边,标题在右边,如果想任意调整这两个子控件的位置有两种方式: 方式一:通过调整子控件的【边缘内边距】edgeInset来实现:imageEdgeInsets 、titleEdgeInsets ; 方式二:自定义按钮,在layoutSubview方法中直接调整子控件的坐标; 方式一代码: UIButton *button = [UIBut...

人不风流枉少年 2256
上一篇: UITableView为group时设置背景透明
下一篇: ios中陀螺仪CoreMotion的使用
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值