iOS学习-UIButton的imageView和titleLabel

UIButton的imageView和titleLabel的位置设置通过setImageEdgeInsets和setTitleEdgeInsets来设置

参考:http://blog.csdn.net/dfqin/article/details/37813591http://blog.sina.com.cn/s/blog_5df876f301016h8h.html

实现如上图的效果其实有多种方法,像在button上嵌套label,imageView即可,下面是通过调节button自带的titleLabel和imageView来实现。

自定义一个创建button的方法,传入titleLabel的text和图片名称,图片不应该太大,width和height超过button的长宽时图片会被压缩

- (UIButton *)creatBtnWithTitle:(NSString *)title andImageName:(NSString *)image
{
    UIImage *buttonImage = [UIImage imageNamed:image];
    CGFloat buttonImageViewWidth = CGImageGetWidth(buttonImage.CGImage)
    ;
    CGFloat buttonImageViewHeight = CGImageGetHeight(buttonImage.CGImage);

    NSString *buttonTitle = title;

    UIFont *buttonTitleFont = [UIFont systemFontOfSize:18.0f];
  
    CGSize buttonTitleLabelSize = [buttonTitle sizeWithAttributes:@{NSFontAttributeName:buttonTitleFont}];
    // button宽度,至少为imageView宽度与titleLabel宽度之和

    CGFloat buttonWidth = buttonImageViewWidth + buttonTitleLabelSize.width;

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

    CGFloat buttonHeight = buttonImageViewHeight + buttonTitleLabelSize.height;

    UIButton *tempBtn = [UIButton buttonWithType:(UIButtonTypeCustom)];

    [tempBtn setBounds:CGRectMake(0, 0, buttonWidth, buttonHeight)];

    [tempBtn.titleLabel setFont:buttonTitleFont];

    [tempBtn setImage:buttonImage forState:UIControlStateNormal];

    [tempBtn.imageView setBackgroundColor:[UIColor clearColor]];

    [tempBtn setTitle:buttonTitle forState:UIControlStateNormal];

    [tempBtn.titleLabel setBackgroundColor:[UIColor clearColor]];

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

    // 找出imageView最终的center

    CGPoint endImageViewCenter = CGPointMake(buttonBoundsCenter.x + tempBtn.bounds.size.width/2-tempBtn.imageView.bounds.size.width/2, buttonBoundsCenter.y);

    // 找出titleLabel最终的center

    CGPoint endTitleLabelCenter = CGPointMake(buttonBoundsCenter.x-tempBtn.bounds.size.width/2 + tempBtn.titleLabel.bounds.size.width/2, buttonBoundsCenter.y);

    // 取得imageView最初的center

    CGPoint startImageViewCenter = tempBtn.imageView.center;

    // 取得titleLabel最初的center

    CGPoint startTitleLabelCenter = tempBtn.titleLabel.center;

    // 设置imageEdgeInsets

    CGFloat imageEdgeInsetsTop = endImageViewCenter.y - startImageViewCenter.y;

    CGFloat imageEdgeInsetsLeft = endImageViewCenter.x - startImageViewCenter.x;

    CGFloat imageEdgeInsetsBottom = -imageEdgeInsetsTop;

    CGFloat imageEdgeInsetsRight = -imageEdgeInsetsLeft;

    tempBtn.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;

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

    return tempBtn;
}

可以再实现方法中创建出一个button

UIButton *btn = [self creatBtnWithTitle:@"爱妃,请叫我朕" andImageName:@"chat_bottom_up_nor"];

    btn.layer.cornerRadius = 5;

    [btn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];

    [btn setTitleColor:[UIColor groupTableViewBackgroundColor] forState:(UIControlStateHighlighted)];

    btn.layer.borderWidth = 0.5;

    btn.frame = CGRectMake(50, 200, 250, 50);

    [self.view addSubview:btn];
时间: 2024-11-07 02:00:29

iOS学习-UIButton的imageView和titleLabel的相关文章

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

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

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

IOS学习--UIButton常用方法(20150122)

// 1.创建一个自定义的按钮 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // 2.添加按钮 [self.view addSubview:btn]; // 3.设置按钮的位置和尺寸 btn.frame = CGRectMake(100, 100, 100, 100); // 4.监听按钮点击(点击按钮后就会调用self的btnClick方法) [btn addTarget:self action:@selector

iOS学习-压缩图片(改变图片的宽高)

压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a graphics image context UIGraphicsBeginImageContext(newSize); // Tell the old image to draw in this new cont

iOS中UIButton的titleEdgeInsets和imageEdgeInsets

默认状态下,UIButton的imageView和titleLabel之间没有间距,而且两个作为整体,居中显示. 设置button的titleEdgeInsets和imageEdgeInsets不是根据按钮的上下左右边距,而是根据titleLabel和imageView的当前位置决定的, 但是在测试的过程中又发现问题,比如 CGFloat topMargin = 50;self.btnTest.imageEdgeInsets = UIEdgeInsetsMake(topMargin, 0, 0,

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

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

(一〇九)UIButton的使用技巧 -imageView、titleLabel、圆角等

UIButton是一个常用控件,使用方法十分基本,但是有很多技巧常常不被注意,本文主要介绍UIButton的一些较高级技巧,用于实现图片和标签显示的美观性等. 开发时常常碰到按钮的下侧或者右侧有标题的情况,如下图所示:   左侧的是上下结构,右侧的是左右结构,要实现这两种显示,有两种方法. [按钮的内部控件] 首先我们要了解按钮内部有imageView和titleLabel两个控件,按钮的内边距分为content(整体).title(标题).image(图片)三个,因此对于水平排布,可以通过内边

ios学习-delegate、传值、跳转页面

ios学习-delegate.传值.跳转页面 1.打开xcode,然后选择ios--Application--Empty Application一个空项目. 项目目录: 2.输入项目名称以及选择保存路径即可. 3.创建文件夹Model.Controller. 4.Model文件夹创建User类:User.h User.m 代码: User.h: [html] view plaincopy #import <Foundation/Foundation.h> @interface User : N

iOS: 学习笔记, 使用performSelectorOnMainThread及时刷新UIImageView

在iOS中, 界面刷新在主线程中进行, 这导致NSURLSession远程下载图片使用UIImageView直接设置Image并不能及时刷新界面. 下面的代码演示了如何使用 performSelectorOnMainThread: withObject:  waitUntilDone: 方法来及时刷新图片 1. 创建iOS空应用程序(Empty Application). 2. 加入一个控制器类. 在YYAppDelegate.m中修改 #import "MainViewController.h