如何调整UITextView的内容大小?


521

是否有一个很好的方法来调整a的大小UITextView以使其内容符合要求?假设我有一个UITextView包含一行文本的:

"Hello world"

然后添加另一行文本:

"Goodbye world"

在Cocoa Touch中,有没有一种好的方法来获取rect可容纳文本视图中所有行的文本,以便我可以相应地调整父视图?

再举一个例子,在Calendar应用程序中查看便笺字段中的事件-注意单元格(及其UITextView包含的内容)如何扩展以容纳便笺字符串中的所有文本行。


请考虑更新正确的答案,因为被接受的答案会导致不必要的计算,因此现在存在针对此问题的contentSize属性。
Juan Boero

Answers:


610

这适用于iOS 6.1和iOS 7:

- (void)textViewDidChange:(UITextView *)textView
{
    CGFloat fixedWidth = textView.frame.size.width;
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    CGRect newFrame = textView.frame;
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
    textView.frame = newFrame;
}

或在Swift中使用(在iOS 11中与Swift 4.1配合使用)

let fixedWidth = textView.frame.size.width
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)

如果要支持iOS 6.1,则还应该:

textview.scrollEnabled = NO;

1
在iOS 7上进行了测试,可以将UITextView的大小调整为UITableViewCell。真的很棒。这是最终对我有用的唯一答案。谢谢!
亚历克斯

37
我需要使用textview.scrollEnabled = NO;,即使在iOS 7中也要防止文本被截断
Brian

19
我建议使用CGFLOAT_MAX宏而不是MAXFLOAT。在32/64位平台上均正确。
埃尼尔(Eonil)2014年

2
在进入下一行之前面临很小波动的人会添加此`NSRange bottom = NSMakeRange(textView.text.length -1,1);。[textView scrollRangeToVisible:bottom];`
ajay_nasa

4
为什么在Swift版本中有两个单独的调用sizeThatFits(...)?第一行是什么?
nekonari '16

576

这在iOS 7或更高版本上不再有效

实际上,有一种非常简单的方法可以将大小调整为UITextView正确的内容高度。可以使用来完成UITextView contentSize

CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;

需要注意的一件事是,contentSize只有使用UITextView将该视图添加到视图中,才能使用正确的视图addSubview。在此之前等于frame.size

如果自动版面设置为ON,则此功能将无效。对于自动布局,一般的方法是使用该sizeThatFits方法并constant在高度约束上更新值。

CGSize sizeThatShouldFitTheContent = [_textView sizeThatFits:_textView.frame.size];
heightConstraint.constant = sizeThatShouldFitTheContent.height;

heightConstraint 通常是通过将属性链接到情节提要中创建的高度约束通过IBOutlet设置的布局约束。


如果要添加一个惊人的答案,2014年,如果您:

[self.textView sizeToFit];

iPhone6 +的行为有所不同:

在此处输入图片说明

仅使用6+(而不是5s或6),它确实向UITextView添加了“多一个空白行”。“ RL解决方案”完美地解决了这一问题:

CGRect _f = self.mainPostText.frame;
_f.size.height = self.mainPostText.contentSize.height;
self.mainPostText.frame = _f;

它解决了6岁以上的“额外排队”问题。


2
你救了我的日子。我一直在为selfCalculating类函数扩展而苦苦忘却。谢谢。
卢卡斯

4
啊哈!我正在设置文本视图的高度,然后调整包含视图的高度。显然,当我这样做时,正在调整文本视图的高度。首先设置包含视图的高度可使事情按预期(或更好的是希望的)运行。
热舔

11
使用[_textView sizeToFit]刷新contentSize属性,删除了将其预先添加到scrollView的要求。
罗德里戈

1
如果使用自动布局,请调用超级layoutIfNeeded视图。然后,您可以从抓取高度contentSize
柏特曼

4
这是关于调整外部容器的大小。该行为在iOS 7中已更改。我在链接的问题中显示了在何处添加sizeToFit和layoutIfNeeded。
亨里克·埃兰森

93

为了使动态上浆UITextView里面UITableViewCell,我发现在Xcode 6以下的组合可与iOS的8 SDK:

  • 将a添加UITextView到a UITableViewCell并将其约束到侧面
  • UITextViewscrollEnabled属性设置为NO。启用滚动功能后,的框架与UITextView内容大小无关,但是禁用滚动功能后,两者之间存在关联。
  • 如果您的表格使用的是原始的默认行高44,它将自动计算行高,但是如果您将默认行高更改为其他值,则可能需要在以下位置手动启用行高的自动计算功能viewDidLoad

    tableView.estimatedRowHeight = 150;
    tableView.rowHeight = UITableViewAutomaticDimension;

对于只读动态调整大小UITextViews就是这样。如果您允许用户编辑您的中的文本UITextView,则还需要:

  • 实施 textViewDidChange:UITextViewDelegate协议方法,并在tableView每次编辑文本时告诉自己重新绘制:

    - (void)textViewDidChange:(UITextView *)textView;
    {
        [tableView beginUpdates];
        [tableView endUpdates];
    }
  • 并且不要忘记将UITextView委托设置在某处Storyboard或某处tableView:cellForRowAtIndexPath:


对我来说最好的答案。完美运行,并且在iOS 5中添加了UITableViewAutomaticDimension,因此它向后兼容。
smmelzer 2015年

4
不太为我工作。每当我键入一个字符时,textViewDidChange方法都会导致我的表视图反弹。我的建议是,在tableView:cellForRowAtIndexPath方法中,对于使用textview的行,而不是使用该方法,如果您处于只读模式,请将.scrollEnabled设置为NO,并且如果您处于编辑视图集滚动启用为是。这样,当只显示它时,它将始终显示全文,而在编辑时,它将以全文开始,并且随着您添加更多的文本,其大小将保持不变,并且较早的文本从顶部滚动
SimonTheDiver

3
此外,我在文本视图中添加了高度限制,因为空文本字段没有高度,因此无法点击以开始编辑。
SimonTheDiver

优秀的解决方案。对我来说,那tableView.rowHeight = UITableViewAutomaticDimension是不必要的。
Christopher Pickslay,2016年

再次感谢布雷特·唐纳德!我忘了怎么做,并在1年后再次找到您的答案😀。
Eric Conner

74

同时使用代码和情节提要的非常简单的解决方案。

通过代码

textView.scrollEnabled = false

通过情节提要

取消选中滚动启用

在此处输入图片说明

除此之外,无需做任何其他事情。


5
这个答案是正确的。在StoryBoard中,您就像UILabel一样具有TextView AutoSize。我们需要做的只是设置scrollEnabled = false。
pnavk

4
从本质上讲,这是正确的:如果您使用“自动布局”约束并关闭滚动,那么整个过程就可以了。
Dan Rosenstark '17

2
非常感谢。这是简单的,在故事板或代码只是禁用滚动,它会像的UILabel与线0
samir105

@ Mansuu…也一样 但是,对于在文本字段上设置numberOfLines = 0的情况,这些情况仍然适用。如果这不起作用,则可能还有其他隐式设置高度的约束。
杰克T.

2
@iOS如果要添加高度限制,则将限制优先级降低,否则将无法工作。
Alok

61

斯威夫特:

textView.sizeToFit()

14
另外,我发现需要将滚动启用设置为false才能起作用。textView.scrollEnabled = false
tmarkiewicz '16

1
您应该记得在textView.sizeToFit()之后调用textView.layoutIfNeeded()
Daniel Kuta 2016年

5
@tmarkiewicz当文本适合您设备的屏幕时,它可以工作,但是当文本大于屏幕上的空间时,这将是一个问题。您将无法滚动它来查看其余文本。
弗朗西斯科·罗梅罗

这就是答案!!!无需更复杂的解决方案!!!@FranciscoRomero为什么不把TextView的表格单元格或colleciton观察室那么你可以随时滚动表或视图colleciton ....
本·史密斯

23

以我(有限)的经验,

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode

不尊重换行符,因此您最终会CGSize比实际需要的短很多。

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size

似乎确实尊重换行符。

此外,文字实际上并未呈现在的顶部UITextView。在我的代码中,我将的新高度设置为UITextViewsizeOfFont方法返回的高度大24个像素。


3
这样就获得了大小,就好像它将在UILabel上绘制文本一样。如果您将该尺寸设置为uitextview的框架,则仍然需要进行一些滚动。
凯夫拉尔

22

在iOS6中,您可以contentSize在设置文本后立即检查UITextView 的属性。在iOS7中,这将不再起作用。如果要恢复iOS7的这种行为,请将以下代码放在UITextView的子类中。

- (void)setText:(NSString *)text
{
    [super setText:text];

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
        CGRect rect = [self.textContainer.layoutManager usedRectForTextContainer:self.textContainer];
        UIEdgeInsets inset = self.textContainerInset;
        self.contentSize = UIEdgeInsetsInsetRect(rect, inset).size;
    }
}

2
我在哪里可以了解更多信息?我完全不知道iOS 7中与此有关的新行为。
StianHøiland'13

CGSize变量的含义是什么?
Tchelow

我删除了尺寸,它不应该放在那儿。
phatmann

18

我会在页面底部发布正确的解决方案,以防有人胆怯(或感到绝望)来阅读这一点。

这是那些不想阅读所有文本的gitHub存储库:resizableTextView

这适用于iOs7(我相信它将与iOs8一起使用)和自动布局。您不需要魔术数字,禁用布局之类的东西。简短而优雅的解决方案。

我认为,所有与约束相关的代码都应使用updateConstraints方法。因此,让我们自己做吧ResizableTextView

我们在这里遇到的第一个问题是在viewDidLoad方法之前不知道实际内容的大小。我们可以走很长的路,并根据字体大小,换行符等进行计算。但是,我们需要可靠的解决方案,因此我们将这样做:

CGSize contentSize = [self sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];

因此,无论我们身在何处,我们现在都知道真实的contentSize:before或after viewDidLoad。现在,在textView上添加高度限制(无论如何通过情节提要或代码)。我们将通过以下方法调整该值contentSize.height

[self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
    if (constraint.firstAttribute == NSLayoutAttributeHeight) {
        constraint.constant = contentSize.height;
        *stop = YES;
    }
}];

最后要做的是告诉超类updateConstraints

[super updateConstraints];

现在我们的班级看起来像:

ResizableTextView.m

- (void) updateConstraints {
    CGSize contentSize = [self sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];

    [self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
        if (constraint.firstAttribute == NSLayoutAttributeHeight) {
            constraint.constant = contentSize.height;
            *stop = YES;
        }
    }];

    [super updateConstraints];
}

漂亮干净,对不对?而且您不必在控制器中处理该代码!

可是等等! 是没有动画!

您可以轻松地为更改设置动画,以textView平滑地拉伸。这是一个例子:

    [self.view layoutIfNeeded];
    // do your own text change here.
    self.infoTextView.text = [NSString stringWithFormat:@"%@, %@", self.infoTextView.text, self.infoTextView.text];
    [self.infoTextView setNeedsUpdateConstraints];
    [self.infoTextView updateConstraintsIfNeeded];
    [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^{
        [self.view layoutIfNeeded];
    } completion:nil];

4
使用CGFLOAT_MAX,而不是FLT_MAX
rob mayoff 2014年

我希望我能给您超过一票的好方案!!
踏板车

13

你试过了吗 [textView sizeThatFits:textView.bounds]吗?

编辑:sizeThatFits返回大小,但实际上不调整组件的大小。我不确定这是您想要的,还是[textView sizeToFit]更多您想要的。无论哪种情况,我都不知道它是否完全适合您想要的内容,但这是尝试的第一件事。


2
sizetofit节省了一天
michaelsnowden

9

另一种方法是使用该NSString方法查找特定字符串将占用的大小:

-(CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size

这将返回适合给定字符串和给定字体的矩形的大小。输入具有所需宽度和最大高度的大小,然后您可以查看返回的高度以适合文本。有一个版本可以让您指定换行模式。

然后,您可以使用返回的大小来更改视图的大小以适合。


8

如果您UITextView不方便使用(例如,您要调整表格视图单元格的大小),则必须通过测量字符串来计算大小,然后在的两边考虑8 pt的填充UITextView。例如,如果您知道所需的文本视图宽度,并想找出相应的高度:

NSString * string = ...;
CGFloat textViewWidth = ...;
UIFont * font = ...;

CGSize size = CGSizeMake(textViewWidth - 8 - 8, 100000);
size.height = [string sizeWithFont:font constrainedToSize:size].height + 8 + 8;

在这里,每8个占四个填充边之一,而100000只是一个很大的最大大小。

在实践中,您可能需要增加一个font.leading高度。这会在您的文本下方添加一个空白行,如果在文本视图的正下方有视觉上较重的控件,则可能会看起来更好。


iOS 8.1中的完美结果
逻辑

填充是我的关键
thibaut noah

8

我们可以通过约束来做到这一点。

  1. 设置UITextView的高度限制。 在此处输入图片说明

2.为该高度约束创建IBOutlet。

 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *txtheightconstraints;

3.别忘了为你的textview设置委托。

4。

-(void)textViewDidChange:(UITextView *)textView
{
    CGFloat fixedWidth = textView.frame.size.width;
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    CGRect newFrame = textView.frame;
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
    NSLog(@"this is updating height%@",NSStringFromCGSize(newFrame.size));
    [UIView animateWithDuration:0.2 animations:^{
                  _txtheightconstraints.constant=newFrame.size.height;
    }];

}

然后像这样更新您的约束:)


那是一个神奇的绰号!
Fattie

设置常量之后需要[textView layoutIfNeeded]; 在动画块中。(自动版图动画会那样做。)
Will Larche

7

以下内容就足够了:

  1. 只记得将您的滚动启用设置为NOUITextView

在此处输入图片说明

  1. 正确设置自动布局约束。

您甚至可以使用UITableViewAutomaticDimension


6

结合Mike McMaster的答案,您可能想要执行以下操作:

[myTextView setDelegate: self];

...

- (void)textViewDidChange:(UITextView *)textView {
  if (myTextView == textView) {
     // it changed.  Do resizing here.
  }
}

6

我找到了一种方法,可以根据其中的文本来调整文本字段的高度,并根据文本字段的高度在其下方排列标签!这是代码。

UITextView *_textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 10)];
NSString *str = @"This is a test text view to check the auto increment of height of a text view. This is only a test. The real data is something different.";
_textView.text = str;

[self.view addSubview:_textView];
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 5 + frame.origin.y + frame.size.height, 300, 20)];
lbl.text = @"Hello!";
[self.view addSubview:lbl];

在这里,UILabel的y-y坐标中的'5'是我想要的textView和Label之间的间隙。
dheeraj

6

那些使用自动版式和您的sizetofit的家伙无法正常工作,请检查一下您的宽度约束。如果您错过了宽度限制,那么高度将是准确的。

无需使用任何其他API。只需一行即可解决所有问题。

[_textView sizeToFit];

在这里,我只关心高度,保持宽度固定,并且错过了故事板中TextView的宽度约束。

这是为了显示服务中的动态内容。

希望这会有所帮助..


6

从iOS 8开始,可以使用UITableView的自动布局功能来自动调整UITextView的大小,而无需任何自定义代码。我在github中放置了一个项目来演示此操作,但这是关键:

  1. UITextView必须禁用滚动,您可以通过编程或通过界面生成器来进行滚动。如果启用了滚动,则不会调整大小,因为滚动使您可以查看较大的内容。
  2. 在UITableViewController的viewDidLoad中,必须为EstimateRowHeight设置一个值,然后将设置rowHeightUITableViewAutomaticDimension

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.estimatedRowHeight = self.tableView.rowHeight;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}
  1. 项目部署目标必须是iOS 8或更高版本。

1
不鼓励这种回答。您应该在此处发布相关代码。
Antzi 2015年

5

我查看了所有答案,所有答案均保持固定宽度,仅调整高度。如果您还希望调整宽度,则可以很容易地使用此方法:

因此在配置文本视图时,请禁用滚动

textView.isScrollEnabled = false

然后在委托方法中func textViewDidChange(_ textView: UITextView)添加以下代码:

func textViewDidChange(_ textView: UITextView) {
    let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
    textView.frame = CGRect(origin: textView.frame.origin, size: newSize)
}

输出:

在此处输入图片说明

在此处输入图片说明


委托方法没有被调用@Peter Stajger
Mansuu ....

4

当我需要在 UITextView适合特定区域:

//文本必须已经添加到子视图中,否则contentviewsize将错误。

-(void)reduceFontToFit:(UITextView *)tv {
    UIFont * font =电视字体;
    double pointSize = font.pointSize;

    而(tv.contentSize.height> tv.frame.size.height && pointSize> 7.0){
        pointSize-= 1.0;
        UIFont * newFont = [UIFont fontWithName:font.fontName size:pointSize];
        tv.font = newFont;
    }
    如果(pointSize!= font.pointSize)
        NSLog(@“字体从%.1f降到%.1f”,pointSize,tv.font.pointSize);
}

4

这是@jhibberd的快速版本

    let cell:MsgTableViewCell! = self.tableView.dequeueReusableCellWithIdentifier("MsgTableViewCell", forIndexPath: indexPath) as? MsgTableViewCell
    cell.msgText.text = self.items[indexPath.row]
    var fixedWidth:CGFloat = cell.msgText.frame.size.width
    var size:CGSize = CGSize(width: fixedWidth,height: CGFloat.max)
    var newSize:CGSize = cell.msgText.sizeThatFits(size)
    var newFrame:CGRect = cell.msgText.frame;
    newFrame.size = CGSizeMake(CGFloat(fmaxf(Float(newSize.width), Float(fixedWidth))), newSize.height);
    cell.msgText.frame = newFrame
    cell.msgText.frame.size = newSize        
    return cell

6
这个问题确实与语言无关。是否真的有必要返回并为UIKit相关问题的所有答案编写快捷端口?好像这样会使谈话变得嘈杂。
eremzeit 2015年

问题,其中大多数问题都没有特定的编程语言,因此即使您搜索快速的语言,您也可以在Google中找到它
Fareed Alnamrouti 2015年

4

禁用滚动

添加内容

并添加文字

[yourTextView setText:@"your text"];
[yourTextView layoutIfNeeded];

如果使用,UIScrollView也应该添加它;

[yourScrollView layoutIfNeeded];

-(void)viewDidAppear:(BOOL)animated{
    CGRect contentRect = CGRectZero;

    for (UIView *view in self.yourScrollView.subviews) {
         contentRect = CGRectUnion(contentRect, view.frame);
    }
    self.yourScrollView.contentSize = contentRect.size;
}


2

使用UITextViewDelegate是最简单的方法:

func textViewDidChange(_ textView: UITextView) {
    textView.sizeToFit()
    textviewHeight.constant = textView.contentSize.height
}

1

希望这可以帮助:

- (void)textViewDidChange:(UITextView *)textView {
  CGSize textSize = textview.contentSize;
  if (textSize != textView.frame.size)
      textView.frame.size = textSize;
}

这行不通!它导致错误:“需要左值作为赋值的左操作数”
leviathan 2010年

您只能分配给textView.frame
jweyrich 2013年

1

如果有其他人到达,此解决方案对我有用,1“ Ronnie Liew” +4“ user63934”(我的文字来自网络服务):请注意1000(对于我而言,没有什么太大的了)

UIFont *fontNormal = [UIFont fontWithName:FONTNAME size:FONTSIZE];

NSString *dealDescription = [client objectForKey:@"description"];

//4
CGSize textSize = [dealDescription sizeWithFont:fontNormal constrainedToSize:CGSizeMake(containerUIView.frame.size.width, 1000)];

CGRect dealDescRect = CGRectMake(10, 300, containerUIView.frame.size.width, textSize.height);

UITextView *dealDesc = [[[UITextView alloc] initWithFrame:dealDescRect] autorelease];

dealDesc.text = dealDescription;
//add the subview to the container
[containerUIView addSubview:dealDesc];

//1) after adding the view
CGRect frame = dealDesc.frame;
frame.size.height = dealDesc.contentSize.height;
dealDesc.frame = frame;

那就是...干杯


1

我发现了根据文本大小重新调整UITextView高度的最佳方法。

CGSize textViewSize = [YOURTEXTVIEW.text sizeWithFont:[UIFont fontWithName:@"SAMPLE_FONT" size:14.0]
                       constrainedToSize:CGSizeMake(YOURTEXTVIEW.frame.size.width, FLT_MAX)];

或者您可以使用

CGSize textViewSize = [YOURTEXTVIEW.text sizeWithFont:[UIFont fontWithName:@"SAMPLE_FONT" size:14.0]
                       constrainedToSize:CGSizeMake(YOURTEXTVIEW.frame.size.width, FLT_MAX) lineBreakMode:NSLineBreakByTruncatingTail];

1

对于那些希望textview实际上向上移动并保持底线位置的人

CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;

if(frame.size.height > textView.frame.size.height){
    CGFloat diff = frame.size.height - textView.frame.size.height;
    textView.frame = CGRectMake(0, textView.frame.origin.y - diff, textView.frame.size.width, frame.size.height);
}
else if(frame.size.height < textView.frame.size.height){
    CGFloat diff = textView.frame.size.height - frame.size.height;
    textView.frame = CGRectMake(0, textView.frame.origin.y + diff, textView.frame.size.width, frame.size.height);
}

1

唯一有效的代码是使用上面的jhibberd答案中的“ SizeToFit”的代码,但实际上除非您在ViewDidAppear中调用它或将其连接到UITextView文本更改事件,否则它不会拾取。


1

基于Nikita Took的回答,我来到了Swift中的以下解决方案,该解决方案可在具有自动布局的iOS 8上运行:

    descriptionTxt.scrollEnabled = false
    descriptionTxt.text = yourText

    var contentSize = descriptionTxt.sizeThatFits(CGSizeMake(descriptionTxt.frame.size.width, CGFloat.max))
    for c in descriptionTxt.constraints() {
        if c.isKindOfClass(NSLayoutConstraint) {
            var constraint = c as! NSLayoutConstraint
            if constraint.firstAttribute == NSLayoutAttribute.Height {
                constraint.constant = contentSize.height
                break
            }
        }
    }

1

快速答案:以下代码计算了textView的高度。

                let maximumLabelSize = CGSize(width: Double(textView.frame.size.width-100.0), height: DBL_MAX)
                let options = NSStringDrawingOptions.TruncatesLastVisibleLine | NSStringDrawingOptions.UsesLineFragmentOrigin
                let attribute = [NSFontAttributeName: textView.font!]
                let str = NSString(string: message)
                let labelBounds = str.boundingRectWithSize(maximumLabelSize,
                    options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                    attributes: attribute,
                    context: nil)
                let myTextHeight = CGFloat(ceilf(Float(labelBounds.height)))

现在您可以将textView的高度设置为 myTextHeight


抱歉,这是什么意思:let attribute = [NSFontAttributeName: textView.text.font!] 这真的是没有错误的Swift代码吗?)您是指 let attribute = [NSFontAttributeName: textView.font!]
Massmaker 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.