textview框架的大小不正确(self.textview.frame.size.height)

时间:2014-03-10 17:20:42

标签: ios uitextview frame

我想根据内容更改textview的高度。我创建了调整其视图大小的方法。我第一次调用此视图控制器时,它正确调整大小(高度= 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)];
    }    
}

我在我的项目中使用autolayout但不是这个视图,因为我不知道如何根据带有autolayout的textview内容正确调整scrollview中的textview(其中还包括2个带标签,图像和按钮的视图)。使用autolayout比使用此功能更好吗?也许你可以帮我解决约束......

2 个答案:

答案 0 :(得分:0)

您只是根据计算更改滚动大小,但缺少更改文本视图本身的大小。设置滚动视图内容大小后更新文本视图的大小,所有应该是正常的(contentSize和框架)。这可能看起来像:

[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;

答案 1 :(得分:0)

试试这个:

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