Ios 使用自动布局在Interface Builder中为UILabel创建非恒定宽度
我在Interface Builder中创建了一个现有的Ios 使用自动布局在Interface Builder中为UILabel创建非恒定宽度,ios,objective-c,Ios,Objective C,我在Interface Builder中创建了一个现有的UILabel,我想在代码中更改其宽度,但由于自动布局的原因,我无法更改。这很简单,我有一个CGSize的宽度,我想为标签设置它。实际上,我的代码工作得很好,我可以为标签指定新的大小,但不幸的是,它没有重新绘制自己。我尝试使用文本rectforbounds:limitedToNumberOfLines:和首选MaxLayoutWidth而没有任何成功或大小更改 float heightIs = [cell.lbl.text
UILabel
,我想在代码中更改其宽度,但由于自动布局的原因,我无法更改。这很简单,我有一个CGSize
的宽度,我想为标签设置它。实际上,我的代码工作得很好,我可以为标签指定新的大小,但不幸的是,它没有重新绘制自己。我尝试使用文本rectforbounds:limitedToNumberOfLines:
和首选MaxLayoutWidth
而没有任何成功或大小更改
float heightIs =
[cell.lbl.text
boundingRectWithSize:cell.lbl.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName:cell.lbl.font }
context:nil]
.size.height;
// get the width size of a string
CGSize textSize = [cell.lbl.text sizeWithAttributes:@{NSFontAttributeName:cell.lbl.font}];
CGFloat strikeWidth = textSize.width;
NSLog(@"TEXT WIDTH %f OF STRING %@", strikeWidth, nameString);
CGRect labelFrame = CGRectMake (0, 0, strikeWidth, heightIs);
cell.lbl.frame = labelFrame;
cell.lbl.preferredMaxLayoutWidth = CGRectGetWidth(labelFrame);
NSLog(@"LABEL WIDTH VALUE %f", cell.lbl.frame.size.width);
有人能给我解释一下正确的方法吗?我不确定从哪里开始。它是IB中的一个选项还是我可以用代码来实现?或者我可以删除所有代码,因为它只能使用IB?当使用自动布局时,代码必须更改约束而不是帧。创建标签宽度约束的出口,并更改其常数。@danh实际上我没有使用约束。我必须做吗?没有其他方法可以在代码中实现吗?我同意danh的观点,它必须是有约束的。如果您自己不使用约束,iOs将使用autoLayout中的默认值。“我想你必须研究一下这个问题。”布希科-如果你使用的是自动布局,那么你就是在使用约束。