UITextView调整其超级视图的大小

时间:2014-08-21 11:07:36

标签: ios objective-c uitextview autolayout

我将这个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)正确调整大小,有什么建议怎么做这样的任务?

4 个答案:

答案 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)

我做得很好。

  1. 设置自动布局,UITextView将其超级视图边缘特别是顶部和底部。 UITextview editable = YES;

  2. 将指向NSLayoutConstraint的指针指向UITextView的高度

  3. 现在你可以通过它的委托来改变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改变。