Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS父子帧更改问题_Ios_Uitextview_Frame - Fatal编程技术网

IOS父子帧更改问题

IOS父子帧更改问题,ios,uitextview,frame,Ios,Uitextview,Frame,我正在尝试调整UITextView底部对齐的父视图的大小,下面是我的代码: -(void)textViewDidChange:(UITextView *)textView { CGSize newTextViewSize = [textView sizeThatFits:CGSizeMake(kTextViewFixedWidth, kTextViewMaxHeight)]; if( newTextViewSize.height != self.textViewOldHeight ) {

我正在尝试调整
UITextView
底部对齐的父视图的大小,下面是我的代码:

-(void)textViewDidChange:(UITextView *)textView
{
CGSize newTextViewSize = [textView sizeThatFits:CGSizeMake(kTextViewFixedWidth, kTextViewMaxHeight)];

if( newTextViewSize.height != self.textViewOldHeight )
{

    CGRect newTextViewFrame = textView.frame;

    newTextViewFrame.size = CGSizeMake(fmaxf(newTextViewSize.width, kTextViewFixedWidth), newTextViewSize.height);

    CGPoint sizeDiff = CGPointMake(newTextViewFrame.size.width-textView.frame.size.width, newTextViewFrame.size.height-textView.frame.size.height);
    newTextViewFrame.origin = CGPointMake(textView.frame.origin.x, textView.frame.origin.y-sizeDiff.y);


    self.textViewOldHeight = newTextViewFrame.size.height;

    CGRect newViewFrame = self.frame;
    newViewFrame.origin = CGPointMake(self.frame.origin.x, self.frame.origin.y-sizeDiff.y);
    newViewFrame.size = CGSizeMake( self.frame.size.width, self.frame.size.height+sizeDiff.y);
    self.frame = newViewFrame;

    textView.frame = newTextViewFrame;


}
这里我试图做的是计算textView的大小更改,然后将该更改应用于其父视图,即self-。发生的情况是自动调整大小,但textView会重置。然而,当我推荐了发生自我调整大小的部分时,child textview按预期工作。有人能告诉我正确的方向来找出这里的问题吗

谢谢,玩得开心

在调查该案例时,我编写了以下代码:

-(void)resize
{
    self.subView = ((UIView*)[self.subviews objectAtIndex:0]);

    [UIView animateWithDuration:2.0
                      delay:0.0 options:UIViewAnimationOptionCurveEaseOut
                 animations:^{

                         CGRect newSubViewFrame = self.subView.frame;
                         newSubViewFrame.size.height += 100;
                         self.subView.frame = newSubViewFrame;
                         NSLog(@"%f", self.subView.frame.size.height);

                         } completion:^(BOOL finished) {
                         [UIView animateWithDuration:2.0
                                               delay:0.0
                                             options:UIViewAnimationOptionCurveEaseOut
                                          animations:^{
                                              NSLog(@"%f", self.subView.frame.size.height);
                                              CGRect newSuperViewFrame = self.frame;
                                              newSuperViewFrame.origin.y -= 50;
                                              newSuperViewFrame.size.height += 100;
                                              self.frame = newSuperViewFrame;
                                              NSLog(@"%f", self.subView.frame.size.height);

                                          } completion:^(BOOL finished) {

                                          }];
                 }];
    NSLog(@"%f", self.subView.frame.size.height);
}
故事是我有一个超级(红色)和子视图(黑色),当代码运行时,子视图第一次按我的预期增长。但是,当超级视图开始调整大小时,子视图将重置其大小并记录所有返回的值。你知道怎么解决吗


如果
self
textView
的父对象,则
textView
的坐标相对于
self
的坐标。这意味着,如果您更改
self
textView
两个帧的Y坐标,您可能会将
textView
移动两倍于您所需的距离。。。请尝试仅删除您设置的
newTextViewFrame.origin
@Guillaume的行。谢谢您的提醒,但调整大小的问题仍然存在。在条件检查后,您可以尝试[textview setneeddisplay]吗。@imalvare我做了,但没有工作。这是一个自动布局问题。通过禁用自动布局解决。如果有人碰巧知道任何解决方案,请发一个帖子。