自动调整大小的UITextView和UIScrollView

11

我已经在Stack Overflow和Google上进行了几次搜索,但是我没有找到解决我的问题的方法。

我有一个产品详细视图,包括UIScrollView和一些子视图(UIImageView、UILabel、UITextView)。你可以在这里找到一个例子。

首先,我想要自动调整UITextView的大小(不是文本本身!)到相应的高度。然后,我想要自动调整整个UIScrollView的大小,以适应我的UITextView和位于其上方的元素的高度。我已经尝试了以下代码:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height);

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO];
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height);

[self.view addSubview:scrollView];
98.0 + [myUITextView frame].size.height的原因是:在获取了myUITextView的高度之后,将其他子视图的高度(98.0)添加到其中。

不幸的是,它并不起作用。根据UIScrollView的内容,它可能太短或太长。我记录了一些结果,发现UITextView的高度总是相同的:

2010-01-27 14:15:45.096 myApp[1362:207] [myUITextView frame].size.height: 367.000000

谢谢!

2个回答

22

实际上,使用UITextView的contentSize可以很容易地将其调整为正确的高度。

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

需要注意的一点是,正确的 contentSize 只有在 UITextView 被使用 addSubview 添加到视图之后才可用。在此之前它等于 frame.size。


0

UITextView不会自动调整大小以适应其内容(至少我不知道),因此您需要自己获取文本的大小并相应地调整UIView的大小。

此页面上的函数将有所帮助-您可以使用它们来获取字符串的宽度和高度,例如:

// Get the size that the string will render at
NSString *contents = @"This is the content of your UITextView";
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap];

// Then set the frame of your UITextView to be the right size
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height);

然后,您可以在其周围布置其他组件。

希望这可以帮助到您,

S

PS 警告,文档链接是正确的,但我的代码示例未经测试,抱歉:)


感谢您的帮助。似乎sizeWithFont:forWidth:lineBreakMode:仅适用于单行文本。我尝试了sizeWithFont:constrainedToSize:lineBreakMode:,它有点起作用。有时它无法计算正确的高度。我猜这是因为我的文本源中有一些换行符,所以我在按钮上加了30像素。 - dennis3484
我刚刚查看了文档,你是完全正确的,对此我感到抱歉!有时候我也遇到过它返回错误高度的问题,我使用了和你完全相同的解决方案——增加30像素 :) - deanWombourne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接