我将这个UITextView作为superview的子视图。我需要根据文本内容动态更改UITextView的高度,我可以通过UITextView委托方法轻松完成此代码
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
但问题是,superview没有根据其子视图高度改变(UITextView)正确调整大小,有什么建议怎么做这样的任务?
答案 0 :(得分:0)
你试过这个吗?
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect frame = textView.superView.frame;
frame.size.height -= textView.frame.size.height;
frame.size.height += newSize.height;
textView.superView.frame = frame;
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
答案 1 :(得分:0)
在- (void)textViewDidChange:(UITextView *)textView
,
它会正常工作。
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
if (!CGRectEqualToRect(textView.frame, newFrame))
{
CGRect frame = textView.superview.frame;
frame.size.height -= textView.frame.size.height;
frame.size.height += newSize.height;
textView.superview.frame = frame;
textView.frame = newFrame;
}
答案 2 :(得分:0)
我做得很好。
设置自动布局,UITextView将其超级视图边缘特别是顶部和底部。 UITextview editable = YES;
将指向NSLayoutConstraint的指针指向UITextView的高度
现在你可以通过它的委托来改变UITextView的高度。
- (void)textViewDidChange:(UITextView *)textView {
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
if (newSize.height > TextViewMinHeight) {
textviewHeight.constant= newSize.height;
}
}
享受。
此外,您无法修复UITextView的高度,但您可以设置一个约束,让UITextView的高度大于或等于数字。
答案 3 :(得分:0)
在xcode 8上讨论这个问题。我的问题是如果我在更改textview高度的同时更改了superview高度。文本视图不会改变。只有在我只改变了文本视图高度时才会改变。
我的解决方案是为textview的高度约束设置一个出口并改变那里的高度。
我仍然不明白为什么约束不允许textview随着它的superview改变。