我想根据内容更改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比使用此功能更好吗?也许你可以帮我解决约束......
答案 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