Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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_Uitextview - Fatal编程技术网

Ios UILabel根据要显示的文本自动调整大小

Ios UILabel根据要显示的文本自动调整大小,ios,objective-c,uilabel,uitextview,Ios,Objective C,Uilabel,Uitextview,我正在开发一个应用程序,其中要求我根据要显示的文本自动调整文本区域的大小 首先,我不确定是否应该使用UILabel(逻辑上是显示静态文本的最佳选择,在我的情况下)或UITextView 我希望如何使用它? 我只想用文本初始化我的标签或文本视图。 相反,我先定义框架,然后在该区域限制文本 如果你能提出正确的解决方案,那将是一个很大的帮助 我查阅了文档和其他参考资料,但没有发现对我有多大帮助,否则我可能会忽略它。您可以通过以下方式找到文本大小: CGSize textSize = [[myObjec

我正在开发一个应用程序,其中要求我根据要显示的文本自动调整文本区域的大小

首先,我不确定是否应该使用
UILabel
(逻辑上是显示静态文本的最佳选择,在我的情况下)或
UITextView

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

如果你能提出正确的解决方案,那将是一个很大的帮助


我查阅了文档和其他参考资料,但没有发现对我有多大帮助,否则我可能会忽略它。

您可以通过以下方式找到文本大小:

CGSize textSize = [[myObject getALongText] 
                    sizeWithFont:[UIFont boldSystemFontOfSize:15] 
                    constrainedToSize:CGSizeMake(maxWidth, 2000)
                    lineBreakMode:UILineBreakModeWordWrap];
然后您可以像这样创建
ui标签

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

我不确定我是否完全理解这个问题,但您可以在
UILabel
上使用
sizeToFit
方法(该方法继承自
UIView
)根据标签文本更改大小。

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];

根据文本查找行数的最简单方法。您可以使用以下代码:

ceil(([aText sizeWithFont:aFont].width)/self.bounds.size.width-300); 
它返回一些浮点值

[lbl setNumberOfLines:floatvalue];

如果只想在高度上调整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;
现在,您可以根据标签大小(无需使用自动布局)使用标题LabelHeightDelta来布局其他视图。

在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];

请注意,使用autolayout调用sizeToFit不会更改大小,因为它将在以后由autolayout计算更改。在这种情况下,您需要为具有“height>=xx”值的UILabel设置适当的高度约束。

因为您将在应用程序中无数次使用此解决方案,请执行以下操作:

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

import UIKit

extension UILabel {
    func resizeToText() {
        self.numberOfLines = 0
        self.sizeToFit()
    }
}
2) 在应用程序代码中,定义所需的标签宽度,然后只需调用
resizeToText()


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

尝试下面的代码,它适用于多行

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

使用此函数,可以根据字符串的长度更改标签的大小

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
}
然后像这样使用它:


@user676298如果有帮助,请至少将其中一个答案标记为答案。水平调整视图大小而不是垂直调整Eriks解决方案垂直调整大小错误:在UILabel中绘制时,不应询问NSString的大小。此消息确实为现代自动布局技术的问题提供了答案,请仔细阅读。
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)