Ios 视图大小调整在第一次调用ViewDidDisplay时不起作用

Ios 视图大小调整在第一次调用ViewDidDisplay时不起作用,ios,objective-c,uiview,Ios,Objective C,Uiview,我正在更改ui视图侧边的ui视图的帧 这是我的视图显示code -(void)viewDidAppear:(BOOL)animated { CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose. myView.frame = newPosition; //here i'm moving view to new position } 在第一次调用viewdide时,my

我正在更改
ui视图
侧边的
ui视图的帧

这是我的
视图显示
code

-(void)viewDidAppear:(BOOL)animated
{  
   CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose.
   myView.frame = newPosition;  //here i'm moving view to new position
}
在第一次调用
viewdide时,
myView
仍处于旧位置。 但是在第二次调用
viewDidDisplay时
myView移动到
newPosition


为什么我的视图在第一次调用
视图显示时没有移动到新位置?您好,您忘记了
[超级视图显示:动画]

    -(void)viewDidAppear:(BOOL)animated
    {  
      [super viewDidAppear:animated];

       CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose.
       myView.frame = newPosition;  //here i'm moving view to new position
    }
但为了更好地改变框架,请使用:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose.
    myView.frame = newPosition;  //here i'm moving view to new position
}
还可以尝试添加一些小动画来改变帧,这样会更酷

[UIView animateWithDuration:0.3 animations:^{
        CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose.
        myView.frame = newPosition;  //here i'm moving view to new position
        } completion:^(BOOL finished) {
        }];
最终代码为:

 - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];

        [UIView animateWithDuration:0.3 animations:^{
            CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose.
            myView.frame = newPosition;  //here i'm moving view to new position
            } completion:^(BOOL finished) {
            }];
    }

尝试在
布局子视图中执行此操作

例如:

- (void) layoutSubviews
{
    [super layoutSubviews];

   CGRect newPosition =CGRectMake(44, 200, 697, 142);//hard code for testing purpose.
   myView.frame = newPosition;  //here i'm moving view to new position
}

考虑到所有其他答案,我认为原因是,当最初调用viewDidAppear时,myView为nil,而在随后调用时,myView不是nil:

- (void)viewDidAppear:(BOOL)animated
{ 
   [super viewDidAppear:animated]; // was missing

   CGRect newPosition = CGRectMake(44, 200, 697, 142);
   myView.frame = newPosition; // nil.frame = ...
}
您应该在这里调用super的实现,但这不应该导致这样的问题


另一个可能的问题是,在第一次出现
-viewdide:
之后,有东西导致
myView
被重新定位,所以你定位了它,又有东西重新定位了它,您可以为
myView
调试此重写
-setFrame:
,或者以某种方式使用符号断点。

没有仍然相同的问题。我用[super-viewdide:animated]更新了viewdide;但我仍然是同一个问题。我的视图还有一个问题是outlet对象。现在用小tipthat试试我试过的所有动画和所有,第一次调用时都不起作用,所以我删除了所有内容,只是用硬编码值更改了视图框架,但仍然不起作用。最后我将其发布在这里。@walinaqvi so,你检查它不是零,或者你认为它不是零,因为它是“出口对象”?