iOS 小知识

UILabel 通过文字计算宽高

UILable *lable=[UILable alloc]init];

lable.text=@"hello world hello world hello world" //设置文本

UIFont *font=[UIFont  systemFontOfSize:14]; //设置字体大小

CGSize contentSize=[lable.text  boundingRectWithSize:CGSizeMake(200,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size;  //计算lable的大小  CGSizeMake(200,MAXFlOAT) 宽最大为200 高度不限

UIButton 图文混排

关于setTitleEdgeInsets和setImageEdgeInsets下面进行一些解释:

UIButton内有两个控件titleLabel和imageView,可以用来显示一个文本和图片,这里的图片区别于背景图片。给UIButton设置了title和image后,它们会图片在左边,文本在图片右边显示。它们两个做为一个整体依赖于button的contentHorizontalAlignment居左居右或居中显示。

显示格式区分:

1.当button.width < image.width时,只显示被压缩后的图片,图片是按照fillXY的方式压缩。

2.当button.width > image.width,且button.width < (image.width+text.width)时,图片正常显示,文本被压缩。

3.当button.width > (image.width+text.width)时,两者并列默认居中显示,可通过button的属性contentHorizontalAlignment改变对齐方式。

想改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。对titleLabel和imageView设置偏移是针对他当前的位置起作用的,并不是针对距离button边框的距离的。

typedefNS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {

UIControlContentHorizontalAlignmentCenter =0,//居中

UIControlContentHorizontalAlignmentLeft   =1,//居左

UIControlContentHorizontalAlignmentRight  =2,//居右

UIControlContentHorizontalAlignmentFill   =3,//

想两改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。需要注意的是,对titleLabel和imageView设置偏移,是针对它当前的位置起作用的,并不是针对它距离button边框的距离的。感觉设置不设置UIControlContentHorizontalAlignmentCenter居中都没有影响,这个网上也找了些相关的信息,感觉都没有说到重点,我这里也没有完全理解透彻,之前都是在设置setTitleEdgeInsets和setImageEdgeInsets这些参数时都是不停的尝试得到的结果。目前这是我理解后,代码实现最后的答案,希望可以帮到大家。

UIButton *btn=[UIButton alloc]init];

btn.frame=CGRectMake(50,50,300,50);

[btn setTitle:@"我是一个按钮" forState:UIControlStateNormal];

btn setImage:[UIImage imageNamed:@"tupian"] forState:UIControlStateNormal];

//设置文字偏移:向下偏移图片高度+向左偏移图片宽度 (偏移量是根据[图片]大小来的,这点是关键)

btn.titleEdgeInsets = UIEdgeInsets(btn.imageView.frame.size.height,  -btn.imageView.frame.size.width,0, 0)

//设置图片偏移:向上偏移文字高度+向右偏移文字宽度 (偏移量是根据[文字]大小来的,这点是关键)

btn.imageEdgeInsets = UIEdgeInsets( -btn.titleLabel!.bounds.size.height, 0, 0,  -btn.titleLabel.bounds.size.width)

你可能感兴趣的:(iOS 小知识)