【问题标题】:Autoresize UITextView and UIScrollView自动调整 UITextView 和 UIScrollView
【发布时间】:2010-05-17 11:00:05
【问题描述】:

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

我有一个包含 UIScrollView 和一些子视图(UIImageView、UILabel、UITextView)的产品的详细信息视图。你可以找到一个例子here

首先我想将 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 框架].size.height: 367.000000

谢谢!

【问题讨论】:

    标签: iphone uiscrollview uitextview autoresize


    【解决方案1】:

    实际上有一个非常简单的方法可以使用它的 contentSize 将 UITextView 的大小调整到正确的高度。

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

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

    【讨论】:

      【解决方案2】:

      UITextView 不会根据其内容自动调整自身的大小(据我所知不是这样),因此您需要自己获取文本的大小并相应地调整 UIView 的大小。

      this page 上的函数会有所帮助 - 您可以使用它们来获取字符串的宽度和高度,例如

      // 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 像素。
      • 我刚刚检查了文档,您完全正确,对此感到抱歉!我遇到了问题,有时它也会返回错误的高度,我使用了与您完全相同的解决方案 - 添加 30px :)
      猜你喜欢
      • 2011-11-06
      • 2019-06-25
      • 2012-11-24
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多