Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.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 如何将uilabel高度固定为动态[取决于文本]?_Ios_Objective C_Uilabel - Fatal编程技术网

Ios 如何将uilabel高度固定为动态[取决于文本]?

Ios 如何将uilabel高度固定为动态[取决于文本]?,ios,objective-c,uilabel,Ios,Objective C,Uilabel,我试图将标签高度固定为动态的,以取决于文本 CGSize size = [Str sizeWithAttributes: @{NSFontAttributeName: [UIFont fontWithName:@"OpenSans" size:15]}]; CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height)); NSLog(@"t

我试图将标签高度固定为动态的,以取决于文本

CGSize size = [Str sizeWithAttributes:
                       @{NSFontAttributeName: [UIFont fontWithName:@"OpenSans" size:15]}];
        CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
        NSLog(@"this is height of the label =%@",NSStringFromCGSize(adjustedSize));
这里我得到了宽度和高度,但是宽度超过了屏幕的宽度

我想要的是,标签宽度应该等于我的屏幕大小,高度根据文本而变化

选择您的标签 单击编辑器并选择适合内容的大小

选择您的标签 单击编辑器并选择适合内容的大小

设置

yourLabel.numberOfLines = 0;
[yourLabel sizeToFit];
为该标签指定特定的宽度或前导和尾随空间,以便宽度保持不变,高度随文本长度的增加而增加

您还可以通过xib文件设置numberOfLines。 1.单击xib中的标签。 2.在“对齐”选项卡下方的右侧面板上,可以将numberOfLines从1设置为0

yourLabel.numberOfLines = 0;
[yourLabel sizeToFit];
为该标签指定特定的宽度或前导和尾随空间,以便宽度保持不变,高度随文本长度的增加而增加

您还可以通过xib文件设置numberOfLines。 1.单击xib中的标签。
2.在“对齐”选项卡下方的右侧面板上,可以将numberOfLines从1设置为0

我认为您的自定义字体造成了问题。您可以使用此代码计算动态大小

NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
                                       options:NSStringDrawingUsesLineFragmentOrigin
                                       context:nil];
CGSize size = rect.size; 

我认为你的自定义字体造成了问题。您可以使用此代码计算动态大小

NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
                                       options:NSStringDrawingUsesLineFragmentOrigin
                                       context:nil];
CGSize size = rect.size; 

1.从Xib开始,您需要为此标签设置第0行的编号:

并使用此方法:

- (CGFloat)getHeightforController:(id)view{
UILabel *tempView =(UILabel *)view;
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
context.minimumScaleFactor = 0.8;

float width = tempView.frame.size.width;

width = width * ([[UIScreen mainScreen] bounds].size.width/320);

CGSize size=[tempView.text boundingRectWithSize:CGSizeMake(tempView.frame.size.width, 200)
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                     attributes:@{ NSFontAttributeName : tempView.font}
                                        context:context].size;
return size.height;
}
调用此方法,如下所示:

label.text = @"text"
CGRect frame = cell.lblAddress.frame;
frame.size.height = [self getHeightforController:label];
label.frame = frame;

在调用此方法之前,请确保您正在为标签设置文本。在Xib中,您需要为此标签设置第0行的编号:

并使用此方法:

- (CGFloat)getHeightforController:(id)view{
UILabel *tempView =(UILabel *)view;
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
context.minimumScaleFactor = 0.8;

float width = tempView.frame.size.width;

width = width * ([[UIScreen mainScreen] bounds].size.width/320);

CGSize size=[tempView.text boundingRectWithSize:CGSizeMake(tempView.frame.size.width, 200)
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                     attributes:@{ NSFontAttributeName : tempView.font}
                                        context:context].size;
return size.height;
}
调用此方法,如下所示:

label.text = @"text"
CGRect frame = cell.lblAddress.frame;
frame.size.height = [self getHeightforController:label];
label.frame = frame;

在调用此方法之前,请确保已为标签设置文本

使用自动布局或执行类似操作

yourLabel.numberOfLines = 0;
yourLabel.lineBreakMode = NSLineBreakByWordWrapping;
yourLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight;

使用自动布局或执行类似操作

yourLabel.numberOfLines = 0;
yourLabel.lineBreakMode = NSLineBreakByWordWrapping;
yourLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight;

您可以使用下面的代码将标签高度固定为动态,以取决于文本

NSString*str=[NSString stringWithFormat:@“Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是该行业的标准虚拟文本,当时一家未知的打印机拿起一个打印工具,将其拼凑成一本打印样本书。”


您可以使用下面的代码将标签高度固定为动态,以取决于文本

NSString*str=[NSString stringWithFormat:@“Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是该行业的标准虚拟文本,当时一家未知的打印机拿起一个打印工具,将其拼凑成一本打印样本书。”



[labelName sizeToFit];[labelName sizeToFit];我是通过编程实现的,所以我对通过编程设置约束感到困惑,即使您是通过编程方式创建标签,您仍然可以向标签添加宽度并设置numberOfLines=0.NSLayoutConstraint*leadingConstraint=[NSLayoutConstraint constraintWithItem:self.contentView属性:NSLayoutAttributeCenter relatedBy:NSLayoutRelationEqual-toItem:\u标签属性:NSLayoutAttributeCenter乘数:1.0常量:0];NSLayoutConstraint*topConstraint=[NSLayoutConstraint constraintWithItem:self.contentView属性:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual-toItem:_标签属性:NSLayoutAttributeTop乘数:1.0常量:0];[self.contentView添加约束:@[leadingConstraint,topConstraint]];尝试使用此选项并按您的方式进行操作。我已通过编程方式完成了此操作,因此无法通过编程方式设置约束即使您通过编程方式创建标签,也可以向标签添加宽度并设置numberOfLines=0.NSLayoutConstraint*leadingConstraint=[NSLayoutConstraint constraintWithItem:self.contentView属性:NSLayoutAttributeCenter relatedBy:NSLayoutRelationEqual-toItem:\u标签属性:NSLayoutAttributeCenter乘数:1.0常量:0];NSLayoutConstraint*topConstraint=[NSLayoutConstraint constraintWithItem:self.contentView属性:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual-toItem:_标签属性:NSLayoutAttributeTop乘数:1.0常量:0];[self.contentView添加约束:@[leadingConstraint,topConstraint]];试着用你自己的方式来操作它。看看我对这个问题的回答:好的,兄弟@WojtekDmyszewicz@WojtekDmyszewicz我已经通过编程方式创建了我的uilabel。在我的示例中,我使用约束来解决您的问题,可以通过编程方式添加相同的约束。请参阅我的答案:ok bro……。@WojtekDmyszewicz@WojtekDmyszewicz我通过编程方式创建了我的uilabel在我的示例中,我使用约束来解决您的问题,可以通过编程方式添加相同的约束。我通过编程方式创建了我的uilabel,您也可以应用它。在创建标签的地方,您需要编写“yourLabel.numberOfLines=0”和“yourLabel.li”neBreakMode=NSLineBreakByWordWrapping'我是通过程序创建uilabel的,您也可以应用此功能。在创建标签的地方,您需要写“yourlab.numberOfLines=0”和“yourlab.lineBreakMode=NSLineBreakByWordWrapping”如果动态标签仍有问题,您需要检查自定义字体(OpenSAN)是否可用。您可以使用以下方法检查应用程序上的可用字体。静态无效dumpAllFonts(){NSLog(@“应用程序上的可用字体列表”);for(NSString*familyName在[UIFont familyNames]中){for(NSString*fontName在[UIFontNamesforFamilyName:familyName]中){NSLog(@“%@”,fontName);}}}如果动态标签仍然存在问题,您需要检查自定义字体(OpenSAN)是否可用。您可以使用以下方法检查应用程序上的可用字体。静态无效dumpAllFonts(){NSLog(@“应用程序上可用字体列表”);for(NSString*familyName in[UIFont familyNames]){f