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,你检查它不是零,或者你认为它不是零,因为它是“出口对象”?