更改uiviewcontroller视图框架?

时间:2015-10-15 19:11:26

标签: ios objective-c

无论我尝试什么,我的视图控制器都不会出现在屏幕外(因为我想要,因为我有一个处理程序(菜单),可以将动画从屏幕外显示到屏幕上。在实现(从其他帖子)我可以在它出现之前不改变视图框架,使用这种方法是有意义的:

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//self.view.frame = CGRectInset(self.view.frame, 100, 50);
self.view.frame = CGRectMake(50, 50, 50, 50);
}

但是,它仍然完全呈现在屏幕上,因为任何标准视图控制器都会(0,0,宽度,高度)

如何解决?

3 个答案:

答案 0 :(得分:7)

您使用方法} void computer::handleMessage(cMessage *msg) { } :或willLayoutSubviews

  

调用以通知视图控制器其视图即将布局   当视图的边界发生变化时,视图会调整其子视图的位置。

因此,不会在视图中显示,而是覆盖了willLayoutSubviews:

viewDidLayoutSubviews

答案 1 :(得分:0)

您是否考虑将所有视图添加到另一个视图,用作容器视图,然后将该视图添加到视图控制器的视图中?然后,您就可以在容器视图出现之前自由定位它。

答案 2 :(得分:0)

您可以访问ViewControllers视图属性并在loadView()中进行设置,该属性将仅设置一次,因此不会弄乱任何自定义动画。

  

当请求其视图属性但当前为nil时,视图控制器调用此方法。此方法加载或创建一个视图,并将其分配给view属性。

因为viewWillLayoutSubviews()将在每次布置子视图时设置框架。

override func loadView() {
    super.loadView()
    self.view.frame = CGRect(x: self.view.bounds.origin.x,
    y: self.view.bounds.origin.y,
    width: self.view.bounds.width,
    height: self.view.bounds.height * 0.8 
}