如何调整标签大小以适应文本的长度

我已经在过去的QA中find了这个解决scheme,但找不到合适的解决scheme。
有谁知道如何dynamic调整UILabel大小以适应文本长度?
我已经上传了我不想要的(第一行)和我想要的(第二行)的屏幕截图。
我会欣赏任何线索,build议或代码示例。 谢谢。 在这里输入图像说明

你正在search的是UILabel方法sizeToFit

我可以尝试向您解释,但知道如何使用UILabel的最佳答案是: https : //stackoverflow.com/a/1054681/666479

Xcode 8和iOS 10

自动布局很容易做到。 不需要在代码中做任何事情。

在这里输入图像说明

使用自动布局

使用自动布局仅固定每个标签的顶部和左侧边缘不要为宽度和高度添加约束。 视图的内在内容大小将照顾到这一点。

在这里输入图像说明

以下是约束条件:

在这里输入图像说明

代码没有什么特别之处。 不需要使用sizeToFit或类似的东西。

 import UIKit class ViewController: UIViewController { @IBOutlet weak var labelOne: UILabel! @IBOutlet weak var labelTwo: UILabel! @IBOutlet weak var labelThree: UILabel! @IBAction func changeTextButtonTapped(_ sender: UIButton) { labelOne.text = "David" labelTwo.text = "met" labelThree.text = "her" } } 

笔记

  • 这个答案已经被Xcode 8,iOS 10和Swift 3重新testing过了。
  • 如果你想多行resize,请参阅我的其他答案 。
  • 感谢这个答案让我走上正轨。

使用这个扩展的UILabel类:

 // // UILabelExtended.h // // Created by Prateek on 6/18/11. #import <Foundation/Foundation.h> /* ********************************************************************************************** This class inherit the class UILabel and extend the features of UILabel. ********************************************************************************************** */ @interface UILabelExtended : UILabel { __unsafe_unretained id customDelegate; id objectInfo; SEL selector; } @property (nonatomic,assign) SEL selector;; @property (nonatomic,assign) id customDelegate; @property (nonatomic,retain) id objectInfo; @end @interface UILabel(UILabelCategory) - (void)setHeightOfLabel; - (void)setWidthOfLabel; - (void)setHeightOfLabelWithMaxHeight:(float)maxHeight; - (void)setWidthOfLabelWithMaxWidth:(float)maxWidth ; @end 

UILabelExtended.m

 // // Created by Prateek on 6/18/11. // #import "UILabelExtended.h" @implementation UILabelExtended @synthesize selector,customDelegate, objectInfo; - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if(self.selector) if([self.customDelegate respondsToSelector:self.selector]) { [self.customDelegate performSelector:self.selector withObject:self]; return; } } - (void)dealloc { self.customDelegate = nil; self.selector = NULL; self.objectInfo = nil; } @end @implementation UILabel(UILabelCategory) - (void)setHeightOfLabel { UILabel* label = self; //get the height of label content CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height; //set the frame according to calculated height CGRect frame = label.frame; if([label.text length] > 0) { frame.size.height = height; } else { frame.size.height = 0; } label.frame = frame; } - (void)setWidthOfLabel { UILabel* label = self; //get the height of label content CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width; //set the frame according to calculated height CGRect frame = label.frame; if([label.text length] > 0) { frame.size.width = width+5; } else { frame.size.width = 0; } label.frame = frame; } - (void)setHeightOfLabelWithMaxHeight:(float)maxHeight { UILabel* label = self; //get the height of label content CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, maxHeight) lineBreakMode:NSLineBreakByWordWrapping].height; //set the frame according to calculated height CGRect frame = label.frame; if([label.text length] > 0) { if (height > maxHeight) { frame.size.height = maxHeight; } else { frame.size.height = height; } } else { frame.size.height = 0; } label.frame = frame; } - (void)setWidthOfLabelWithMaxWidth:(float)maxWidth { UILabel* label = self; //get the height of label content CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width; //set the frame according to calculated height CGRect frame = label.frame; if([label.text length] > 0) { if (width > maxWidth) { frame.size.width = maxWidth; } else { frame.size.width = width; } } else { frame.size.width = 0; } label.frame = frame; } @end 

使用方法:1)设置UILabel文本2) [yourLBLObj setHeightOfLabel];[yourLBLObj setWidthOfLabel]; 它会根据文字自动设置高度或宽度。

您只需计算string大小的UILabel宽度,请尝试使用此简单代码设置UILabel大小

  // Single line, no wrapping; CGSize expectedLabelSize = [string sizeWithFont:yourFont]; // you get width,height in expectedLabelSize; //expectedLabelSize.width,expectedLabelSize.height 

尝试这个

  NSString *text1 = [NSString stringWithFormat:@"%@",commentText]; CGSize constraint1 = CGSizeMake(280, 2000); CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap]; UILabel *lblComment = [[UILabel alloc] initWithFrame:CGRectMake(posx,posy,size1.width,size1.height)] ; lblComment.lineBreakMode = UILineBreakModeWordWrap; lblComment.numberOfLines = size1.height/15; [lblComment setFont:[UIFont systemFontOfSize:12]]; lblComment.text = text1; lblComment.tag = shareObjC.userId; [lblComment setNeedsDisplay] 

您可以使用这段代码来计算标签宽度并进行设置

  CGSize expectedLabelSize = [name sizeWithFont:yourfont constrainedToSize:maximumLabelSize]; 

//你可以从expectedLabelSize中获取宽度高度并相应地设置

目前正在使用IOS-8,并且我对@Suragch做了很小的修改(需要使用自动布局来完成这个工作)

以下是结果中的步骤和屏幕截图:

  1. 将textview放在UIView中,而不是直接在storyboard的content-view中
  2. 从故事板禁用textview的滚动
  3. 添加领导和顶部的约束,因为我已经添加到查看下面的截图(拖尾约束是可选的,但我已经添加)

不需要在swift中添加代码,这可以在故事板本身完成。

结果: 在这里输入图像说明