来公司上班两天了,作为菜鸟的我还差处于朦胧中,今天就分享一个关于UILable自适应的问题,其实网上有很多案列可以自己去搜看,但我还是想分享出来。
我是在UITableView中实现的所以下面代码基本都在TableViewCell里面:
首先我们需要定义一个类来用,在程序中定义一个名为MyString(Objective-C 类型),代码如下:
在.h文件中定义一个方法如下:
/**
*返回值是该字符串所占的大小(width, height)
*font : 该字符串所用的字体(字体大小不一样,显示出来的面积也不同)
*maxSize : 为限制改字体的最大宽和高(如果显示一行,则宽高都设置为MAXFLOAT,如果显示为多行,只需将宽设置一个有限定长值,高设置为MAXFLOAT)
*/
-(CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize;
然后在.m文件中实现这个方法如下://返回字符串所占用的尺寸.
-(CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize
{
NSDictionary *attrs =@{NSFontAttributeName : font};
return [selfboundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOriginattributes:attrs context:nil].size;
}
这个方法创建好后就到cell里面去,引用这个类,在cell中的uilabel实现这个方法代码如下:
#import "lvyouTableViewCell.h"
#import <UIImageView+WebCache.h>
#import "NSString+MyString.h"
@interface lvyouTableViewCell()
@property (nonatomic,strong)UILabel *nameLabel;//标签1
@property (nonatomic,strong)UILabel *areanameLabel;//标签2
@property (nonatomic,strong)UIImageView *image;//图片1
@end
@implementation lvyouTableViewCell
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
//图片
_image = [[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 150, 100)];
[self.contentView addSubview:_image];
//名字
_nameLabel = [[UILabel alloc]init];
_nameLabel.textColor = [UIColor grayColor];
[self.contentView addSubview:_nameLabel];
//地址
_areanameLabel = [[UILabel alloc]init];
_areanameLabel.textColor = [UIColor grayColor];
[self.contentView addSubview:_areanameLabel];
//介绍
}
return self;
}
- (void)awakeFromNib {
}
由于是在set方法赋值所以自适应的操作的在赋值前实现,所以在set中实现如下:
//运用set方法赋值数据
-(void)setLvyoumodel:(lvyouModel *)lvyoumodel{
_lvyoumodel = lvyoumodel;
//第三方图片赋值
[self.image sd_setImageWithURL:[NSURL URLWithString:_lvyoumodel.BigPic] placeholderImage:[UIImage imageNamed:@"药品"]];
//设置大小
CGSize whsize = CGSizeMake(MAXFLOAT, MAXFLOAT);
//设置计算后的大小
CGSize size = [lvyoumodel.name sizeWithFont:[UIFont systemFontOfSize:15] maxSize:whsize];
_nameLabel.text = lvyoumodel.name;
_nameLabel.font = [UIFont systemFontOfSize:15];
//lable自身大小设置
_nameLabel.frame = CGRectMake(_image.bounds.size.width+10, 30, size.width, size.height);
_areanameLabel.frame = CGRectMake(CGRectGetMaxX(_nameLabel.frame)+20, 30, 50, 20);
_areanameLabel.text = lvyoumodel.areaname;
}
@end
如下: