Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用自动布局在Interface Builder中为UILabel创建非恒定宽度_Ios_Objective C - Fatal编程技术网

Ios 使用自动布局在Interface Builder中为UILabel创建非恒定宽度

Ios 使用自动布局在Interface Builder中为UILabel创建非恒定宽度,ios,objective-c,Ios,Objective C,我在Interface Builder中创建了一个现有的UILabel,我想在代码中更改其宽度,但由于自动布局的原因,我无法更改。这很简单,我有一个CGSize的宽度,我想为标签设置它。实际上,我的代码工作得很好,我可以为标签指定新的大小,但不幸的是,它没有重新绘制自己。我尝试使用文本rectforbounds:limitedToNumberOfLines:和首选MaxLayoutWidth而没有任何成功或大小更改 float heightIs = [cell.lbl.text

我在Interface Builder中创建了一个现有的
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中的默认值。“我想你必须研究一下这个问题。”布希科-如果你使用的是自动布局,那么你就是在使用约束。