IOS XIB中设置了约束后无法在代码中改变视图的frame

今天在修改代码的时候发现了一些问题,便做了一下优化

先上图说事:
这里写图片描述

在这里的播放列表cell中是两个UILabel分别显示的是作品名和作者名。没修改之前,两个lab实在XIB中初始化和设置约束的,出来的效果就是无法动态的根据字符串长度来增加lab的宽度,或是做了一下设置后,虽然可以实现效果,但是在出现边界情况时就无法控制了(比如:作品名就超出了cell的宽度。。。。。)

搜索了一会后发现有的解决方案是说:将cell的autolayout勾选掉(去掉);—没有尝试 自我感觉会对不通屏幕尺寸产生不知道的效果 ,还是乖乖拿代码写吧。

上代码:

//
//  MusicListTableViewCell.m
//

#import "MusicListTableViewCell.h"

@implementation MusicListTableViewCell

- (void)awakeFromNib {
    [super awakeFromNib];
    self.labName = [[UILabel alloc] init];
    self.labName.backgroundColor = [UIColor clearColor];
    self.labName.font = FONT(QB_FONT_SIZE + 2);
    self.labName.textAlignment = NSTextAlignmentLeft;
    self.labName.textColor = UIColorHex(0x323232);
    self.labName.numberOfLines = 1;
    self.labName.lineBreakMode = NSLineBreakByTruncatingTail;
    [self addSubview:self.labName];

    self.labAuthor = [[UILabel alloc] init];
    self.labAuthor.backgroundColor = [UIColor clearColor];
    self.labAuthor.font = FONT(QB_FONT_SIZE - 2);
    self.labAuthor.textAlignment = NSTextAlignmentLeft;
    self.labAuthor.textColor = UIColorHex(0x898989);
    self.labAuthor.numberOfLines = 1;
    self.labAuthor.lineBreakMode = NSLineBreakByTruncatingTail;
    [self addSubview:self.labAuthor];
}


-(void)cellShowMusic:(MusicModel*)model{

    NSString *praiseNumber = model.name;
    CGSize textSize = [praiseNumber boundingRectWithSize:CGSizeMake(MAXFLOAT, 40) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:FONT(QB_FONT_SIZE + 2)} context:nil].size;
    CGFloat width = ceil(textSize.width);
    if (width > self.bounds.size.width - 70) {
        width = self.bounds.size.width - 70;
    }
    self.labName.frame = CGRectMake(10, 0, width, self.bounds.size.height);
    [self.labAuthor setFrame:CGRectMake(width + 20, 2, self.bounds.size.width - width - 50, self.bounds.size.height - 2)];
    self.labName.text = model.name;
    self.labAuthor.text = [NSString stringWithFormat:@"- %@",model.singer];

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

主要的思路就是在显示数据的时候计算字符串的长度,从而去动态的设置lab的宽度:

CGSize textSize = [praiseNumber boundingRectWithSize:CGSizeMake(MAXFLOAT, 40) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:FONT(QB_FONT_SIZE + 2)} context:nil].size;

之后做的一些操作就是在出现一个lab字数过长时主动的限制宽度。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值