UILabel根据要显示的文本自动resize

我正在处理一个应用程序,在这个应用程序中,我需要根据要显示的文本来自动调整文本区域的大小。

首先,我不知道这是我应该使用UILabel (逻辑上是显示静态文本,这是在我的情况下)或UITextView的最佳select。

我希望如何使用它?
我想简单地用Text来初始化我的标签或文本视图。 相反,我先定义框架,然后限制我的文本在该区域。

如果你能提出正确的解决scheme,这将是一个很大的帮助。

我通过文档和其他参考文件,但没有find太多可以帮助我在这里或我可以忽略它。

sizeToFit方法工作得很好。

我没有跟随。

 UILabel *testLabel =[[UILabel alloc] initWithFrame:CGRectMake(6,3, 262,20 )]; // RectMake(xPos,yPos,Max Width I want, is just a container value); NSString * test=@"this is test this is test inthis is test ininthis is test inthis is test inthis is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ..."; testLabel.text = test; testLabel.numberOfLines = 0; //will wrap text in new line [testLabel sizeToFit]; [self.view addSubview:testLabel]; 

你可以find一个文本大小:

 CGSize textSize = [[myObject getALongText] sizeWithFont:[UIFont boldSystemFontOfSize:15] constrainedToSize:CGSizeMake(maxWidth, 2000) lineBreakMode:UILineBreakModeWordWrap]; 

那么你可以像这样创build你的UILabel

 UILabel * lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,0,textSize.width, textSize.height]; [lbl setNumberOfLines:0]; [lbl setLineBreakMode:UILineBreakModeWordWrap]; [lbl setText:[myObject getALongText]]; 

在Swift中:

 testLabel = UILabel(frame: CGRectMake(6, 3, 262, 20)) testLabel.text = test testLabel.numberOfLines = 0 testLabel.sizeToFit() 

在目标C中

 UILabel *testLabel = [[UILabel alloc] initWithFrame: CGRectMake(6, 3, 262, 20)]]; testLabel.text = test; testLabel.numberOfLines = 0; [testLabel sizeToFit]; 

如果你只想调整UILabel的高度,使用这个:

 @property (nonatomic, weak) IBOutlet UILabel *titleLabel; CGRect titleLabelBounds = self.titleLabel.bounds; titleLabelBounds.size.height = CGFLOAT_MAX; // Change limitedToNumberOfLines to your preferred limit (0 for no limit) CGRect minimumTextRect = [self.titleLabel textRectForBounds:titleLabelBounds limitedToNumberOfLines:2]; CGFloat titleLabelHeightDelta = minimumTextRect.size.height - self.titleLabel.frame.size.height; CGRect titleFrame = self.titleLabel.frame; titleFrame.size.height += titleLabelHeightDelta; self.titleLabel.frame = titleFrame; 

现在,您可以使用titleLabelHeightDelta根据您的标签大小来布置其他视图(不使用自动布局)。

我不知道我完全理解这个问题,但是可以使用UILabel上的sizeToFit方法(该方法是从UIViewinheritance的)根据标签文本更改大小。

最简单的方法来find没有。 线根据文本。 你可以使用这个代码:

 ceil(([aText sizeWithFont:aFont].width)/self.bounds.size.width-300); 

它返回一些浮点值。

 [lbl setNumberOfLines:floatvalue]; 

请注意,使用自动布局调用sizeToFit不会更改大小,因为稍后将通过自动布局计算来更改大小。 在这种情况下,您需要使用“height> = xx”值为UILabel设置适当的高度约束。

由于您要在应用程序中无数次使用此解决scheme,请执行以下操作:

1)创build一个名为extensions的目录,并用以下代码添加名为UILabel.swift的新文件:

 import UIKit extension UILabel { func resizeToText() { self.numberOfLines = 0 self.sizeToFit() } } 

2)在您的应用程序代码中,定义您想要的标签宽度,然后调用resizeToText()

 label.frame.size.width = labelWidth label.resizeToText() 

这将保持宽度,同时自动增加高度。

尝试波纹pipe代码,它适用于多行

 self.labelText.text = string; self.labelText.lineBreakMode = NSLineBreakByWordWrapping; self.labelText.numberOfLines = 0; 

你可以使用这个函数来根据string的长度来改变标签的大小

 func ChangeSizeOfLabel(text:String) -> CGSize{ let font = UIFont(name: "HelveticaNeue", size: 12)! let textAttributes = [NSFontAttributeName: font] let size = text.boundingRectWithSize(CGSizeMake(310, 999), options: .UsesLineFragmentOrigin, attributes: textAttributes, context: nil) let adjustSize = CGSizeMake(size.width, size.height) return adjustSize } 

并像这样使用它:

 showLabel.frame = CGRectMake(x, y, width , self.ChangeSizeOfLabel("Hello , Height is changing dynamically.....").height)