iOS中UIButton的titleEdgeInsets和imageEdgeInsets

默认状态下,UIButton的imageView和titleLabel之间没有间距,而且两个作为整体,居中显示。

设置button的titleEdgeInsets和imageEdgeInsets不是根据按钮的上下左右边距,而是根据titleLabel和imageView的当前位置决定的,

但是在测试的过程中又发现问题,比如

CGFloat topMargin = 50;self.btnTest.imageEdgeInsets = UIEdgeInsetsMake(topMargin, 0, 0, 0);

本行代码运行后按钮的imageView的位置应该相对之前的位置向下移动50,但是实际的情况并不是这样的,经过多次测试(topMargin取多次值),button的imageView向下偏移(以imageView之前的状态)的量始终是 topMargin/2。

(这样好奇怪啊。。。。。。最后经过思考……^_^~,由于imageEdgeInsets和titleEdgeInsets不是相对于按钮边距的值,而是相对于原来的位置的偏移。但是UIEdgeInsetsMake的参数有四个,top,left,button和right,而控件不可能同时即向上移动又向下移动,或者即向左又向右移动)

以下面为例:

self.btnTest.imageEdgeInsets = UIEdgeInsetsMake(topMargin, leftMargin, buttomMargin, rightMargin);

此时imageView相对于原始的偏移为:

x = (leftMargin - rightMargin)  / 2;

y = (topMargin - buttomMargin) / 2;

(实测)。

时间: 2024-12-24 11:40:04

iOS中UIButton的titleEdgeInsets和imageEdgeInsets的相关文章

iOS 中UIButton的 settitle 和 titlelabel的使用误区

UIButton中设置Titl方法包括以下几种: - (void)setTitle:(NSString *)title forState:(UIControlState)state; - (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state @property(nonatomic,readonly,retain) NSString *currentTitle; @property(n

iOS中UIButton控件的用法及部分参数解释

在UI控件中UIButton是极其常用的一类控件,它的类对象创建与大多数UI控件使用实例方法init创建不同,通常使用类方法创建: + (id)buttonWithType:(UIButtonType)buttonType; 如果使用实例方法创建UIButton对象,如: UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)]; 对象的创建是没有任何问题的,但是当为这个button对象设置一

UIButton的titleEdgeInsets和imageEdgeInsets属性

转:http://www.cnblogs.com/huichun/p/3419596.html uiButton控件上自带了一个uiLabel类型的子控件和一个uiImageView类型的子控件,如果可以正确使用他们的edgeInsets属性,就能把button设置成我们想要的样子. 关于titleEdgeInsets,苹果文档的解释是:The inset or outset margins for the rectangle around the button’s title text,而且i

ios中UIButton选中状态切换

关于UIButton的事件枚举有许多,平时用的少所以很多的都不是很清楚,今天了解了下,看了以前的代码,觉得在UIButton选中时操作写了许多冗余代码,而忽略了UIButton一个很重要的属性,如下: [objc] view plain copy print? typedef NS_OPTIONS(NSUInteger, UIControlState) { UIControlStateNormal       = 0, UIControlStateHighlighted  = 1 << 0, 

IOS中UIButton的背景图像无法正常显示的原因

主要是在将图像引入项目中,没有选择Destination:Copy items if needed一项. 没有选择Destination:Copy items if needed一项,图像只能是以链接的形式存在于项目中,当图像移动路径时,项目中的图像就无法正常显示. 所以,以后只要把其他资源引进项目中,都要勾选这一项,即将资源复制一份放进项目中,而不是以链接的形式存在于项目中.

IOS中UIButton和UIImageView的区别

1.使用场合 UIImageView:如果仅仅是为了显示图片,不需要监听图片的点击事件 UIButton:既要显示图片,又要监听图片等点击事件 2.相同点 都能显示图片 3.不同点 UIButton能处理点击事件,UIImageView不能处理点击事件 UIButton既能显示图片,又能显示文字 UIButton能同时显示两张图片,可以在Image和Background属性里面设置图片 UIButton继承自UIControl,因此默认就能处理事件 UIImageView继承自UIView,因此

ios开发中UIButton的使用(一)

ios开发中UIButton的使用(一) 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 normal(普通状态) 默认情况(Default) 对应的枚举常量:UIControlStateNormal highlighted(高亮状态) 按钮被按下去的时候(手指还未松开) 对应的枚举常量:UIControlStateHighlighted disabled(失效状态,不可用状态

ios中UIControl详解

上篇讲到了UITouch和UIEvent事件,简单回顾一下,UIEvent是一系列UITouch的集合,在IOS中负责响应触摸事件.另外还提到了响应者链的概念,在IOS中,所有事件有一个最先响应者,事件可以沿着响应者链向下传递. 接下来是UIControl对象 UIControl是UIView的子类,当然也是UIResponder的子类.UIControl是诸如UIButton.UISwitch.UITextField等控件的父类,它本身也包含了一些属性和方法,但是不能直接使用UIControl

iOS中Animation 动画 UI_22

1.iOS中我们能看到的控件都是UIView的子类,比如UIButton UILabel UITextField UIImageView等等 2.UIView能够在屏幕的显示是因为在创建它的时候内部自动添加一个CALayer图层,通过这个图层在屏幕上显示的时候会调用一个drawRect: 的方法,完成绘图,才能在屏幕上显示 3.CALayer 本身就具有显示功能,但是它不能响应用户的交互事件,如果只是单纯的显示一个图形,此时你可以使用CALayer创建或者是使用UIView创建,但是如果这个图形