【问题标题】:UITextView Content Size too ShortUITextView 内容大小太短
【发布时间】:2012-11-01 19:59:40
【问题描述】:

我有一个 UITextView,我想根据它的内容动态调整它的大小。

由于某种原因,文本视图总是比它的内容短!代码如下:

_textView.text = [NSString stringWithFormat:@"Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test "];

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

结果如下:

如您所见,UITextView(白色)太短了。如果我把更多或更少的内容放在那里,那么短是一样的,即

我确定这很简单,但我无法解决。

【问题讨论】:

标签: ios xcode uitextview


【解决方案1】:

我在 iOS7 中使用故事板时遇到了同样的问题。

我的解决方案是添加以下代码:

    CGRect newTextViewFrame = self.textView.frame;
    newTextViewFrame.size.width = self.textView.contentSize.width + self.textView.contentInset.right + self.textView.contentInset.left;
    newTextViewFrame.size.height = self.textView.contentSize.height + self.textView.contentInset.top + self.textView.contentInset.bottom;
    self.textView.frame = newTextViewFrame;

viewDidAppear: 视图生命周期方法中,它立即调整大小以适合其内容。不幸的是,这种调整大小发生在视图已经出现之后,这意味着用户看到了它的发生。

例子:

- (void)viewDidAppear:(BOOL)animated
{
        [super viewDidAppear:animated];

        CGRect newTextViewFrame = self.textView.frame;
        newTextViewFrame.size.width = self.textView.contentSize.width + self.textView.contentInset.right + self.textView.contentInset.left;
        newTextViewFrame.size.height = self.textView.contentSize.height + self.textView.contentInset.top + self.textView.contentInset.bottom;
        self.textView.frame = newTextViewFrame;
}

【讨论】:

  • 我已经解决了这个问题,因为我最终改用了 UIWebView(出于其他原因)。不过,我会将其作为回答,谢谢。
【解决方案2】:

在调整其框架大小之前将 UITextView 添加到主视图 (addSubview) (见this question

【讨论】:

  • UITextView 位于 UIScrollView 内(内置于情节提要中),那么我该怎么做呢?我是 iOS 新手,抱歉。
  • 或许可以改用 [_textView sizeToFit]
【解决方案3】:

我在这里找到了答案:https://stackoverflow.com/a/2487402/255463,然后我这样做:

首先,我使用情节提要添加了一个 UITextView,然后我也使用情节提要将 textView 嵌入到 UIScrollView 中,然后将每个视图与情节提要的插座连接起来。在视图控制器内部 sublass 这是我得到的:

#import "DetailViewController.h"

@interface DetailViewController ()

@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@end

@implementation DetailViewController

@synthesize textView = _textView;
@synthesize scrollView = _scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.textView.text = [NSString stringWithFormat:@"Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test "];
    CGRect frame = self.textView.frame;
    frame.size.height = self.textView.contentSize.height;
    self.textView.frame = frame;

    self.scrollView.contentSize = CGSizeMake(320.0, self.descriptionView.contentSize.height + 147.0);
}

@end

【讨论】:

  • 这基本上就是我正在做的。
  • 我相信,我刚刚再次尝试使用您的代码,它做同样的事情。真的很迷茫!
  • 不幸的是,在 iOS7 中,UITextView 的 contentSize 属性不会在文本更改时立即更新。我正在开发一种解决方法。
猜你喜欢
  • 2013-10-03
  • 2014-03-30
  • 1970-01-01
  • 2010-09-08
  • 2020-07-21
  • 1970-01-01
  • 2011-05-03
  • 2013-11-19
相关资源
最近更新 更多