Ios UITextView调整其superview的大小

Ios UITextView调整其superview的大小,ios,objective-c,uitextview,autolayout,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

我将此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)正确调整大小,是否有任何建议如何执行此任务

你试过这个吗

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; 
-(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;
}
我成功了

  • 设置UITextView固定其superview边(尤其是顶部和底部)的自动布局。UITextview可编辑=是

  • 将指向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的高度大于或等于一个数字。

    在xcode 8上遇到了这个问题。我的问题是,如果我在更改textview高度的同时更改superview高度。。文本视图不会更改。如果我只改变textview的高度,它就会改变

    我的解决方案是为textview设置高度约束的出口,并在那里更改高度


    我仍然不明白为什么约束不允许textview随superview更改

    我在
    -(void)textViewDidChange:(UITextView*)textView
    中使用了您的代码,但它没有给出预期的结果。superview保持向下(因为高度已更改),textView的框架根本没有更改。如果用户点击“回车”键在textView中新建一行,您确定这类任务没有考虑吗?请在此处共享两个iOS模拟器屏幕。1.在文本视图高度更改之前。2.更改文本视图高度后@InvalidLogin这是更改任何内容之前的文本视图:这是更改文本视图高度之后的文本视图:好的,我纠正了这个问题,并在这里发布了新的答案。此代码给出了相同的结果,超级视图高度保持下降,而文本视图框架根本没有更改。检查screen.xib文件中的
    自动布局
    属性。您应该禁用
    autolayout
    ,因为此属性会自动生成一些约束,这可能会导致某些UI问题,这可能与您的问题一样。是的,我正在使用自动布局,不知怎的,我无法关闭自动布局功能,因为我仍然将其用于我应用程序中的另一个控件。代码在没有自动布局的情况下可以完美地工作,所以这个解决方案在我的问题中不起作用。任何帮助都将不胜感激。谢谢