【问题标题】:Incorrect size of a textview frame (self.textview.frame.size.height)textview 框架的大小不正确(self.textview.frame.size.height)
【发布时间】:2014-03-10 17:20:42
【问题描述】:

我想根据其内容更改文本视图的高度。我创建了调整其视图大小的方法。我第一次调用此视图控制器时,它会正确调整大小(高度 = 253),但其他时候不会(高度 = 296)。

我尝试从 viewDidAppear、viewWillAppear 和 viewDidLoad 调整它的大小。第一次调用 viewDidAppear 和 viewDidLoad。第二次和之后的所有方法(viewDidAppear、viewWillAppear 和 viewDidLoad)都被调用。我不知道原因,也不知道为什么会出现这种奇怪的行为,有什么线索吗?

-(void) setHeight
{
    NSLog(@"Set height");
    CGRect frame = descriptionTextView.frame;
    frame.size.height = descriptionTextView.contentSize.height;
    descriptionTextView.frame = frame;
    NSLog(@"height: %f", descriptionTextView.frame.size.height);

    if([[UIScreen mainScreen] bounds].size.height == 568) //iPhone 4inch
    {
        totalHeight = 380+frame.size.height;
        [self.mainScrollView setContentSize:CGSizeMake(320,totalHeight)];
    }
    else{
        totalHeight = 250+frame.size.height;
        [self.mainScrollView setContentSize:CGSizeMake(320,totalHeight)];
    }    
}

我在我的项目中使用自动布局,但不用于此视图,因为我不知道如何根据带有自动布局的 textview 内容正确调整滚动视图(还包括另外 2 个带有标签、图像和按钮的视图)内的 textview 大小。使用自动布局比使用此功能更好吗?也许你可以帮助我解决这些限制......

【问题讨论】:

  • 你在哪里调用该方法?你期望什么价值?我还看到您正在相应地更改滚动大小而不是 textView
  • 您是否开启了自动布局?它可能会导致您正在谈论的问题。
  • 我尝试从 viewWillAppear、viewDidAppear 和 viewDidLoad 调用它。相同的行为,第一次正确调整大小,第二次和以下时间没有。因为我有一个自定义标签栏,所以这个视图控制器(视图)被放置在一个容器视图中。
  • 你在哪里实际设置 UITextView 的高度

标签: ios uitextview frame


【解决方案1】:

您仅根据计算更改滚动大小,但您缺少更改文本视图本身的大小。设置滚动视图内容大小后,更新文本视图的大小,一切都应该没问题(contentSize 和 frame)。这可能看起来像:

[descriptionTextView setContentSize:CGSizeMake(CGRectGetWidth(descriptionTextView.frame),totalHeight)];
CGRect frame = descriptionTextView.frame;
frame.size.height = totalHeight;
[descriptionTextView setFrame:frame]; 

顺便说一句:在 if 语句中,你只能计算 totalHeight 并在之后设置它。

另外你不需要这一行:

frame.size.height = descriptionTextView.contentSize.height;

【讨论】:

  • 我改变了它(descriptionTextView.frame = frame)。但是,我也尝试过使用您的代码,并且得到了相同的行为:第一次有效,随后无效。
  • 很好,但是您想在进入视图时更改两次?
  • 我只想改一次。内容来自 JSON 文件。
【解决方案2】:

试试这个:

CGSize constraintSize;
constraintSize.height = MAXFLOAT;
constraintSize.width = yourTextView.frame.size.width;
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                      [UIFont fontWithName:@"yourFontName" size:yourFontSize], NSFontAttributeName,
                                      nil];

CGRect frame = [yourTextView.text boundingRectWithSize:constraintSize
                                  options:NSStringDrawingUsesLineFragmentOrigin
                               attributes:attributesDictionary
                                  context:nil];
// Use this frame for your textview

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多