iOS viewWillDisappear viewWillAppear viewDidAppear等

#pragma mark 视图即将加入窗口时

-(void)viewWillAppear:(BOOL)animated{

   NSLog(@"视图即将加入窗口时");
   [self getdata];//加载
}

 

#pragma mark 视图已经加入到窗口时

-(void)viewDidAppear:(BOOL)animated{

    NSLog(@"视图已经加入到窗口时");

     [self.collectionView reloadData];// 刷新tableView即可

}

 

#pragma mark 视图被驳回时调用,覆盖或以其他方式隐藏。

- (void)viewWillDisappear:(BOOL)animated{

     NSLog(@"视图被驳回时调用,覆盖或以其他方式隐藏。");

}

 

#pragma mark 视图被驳回后调用,覆盖或以其他方式隐藏。

- (void)viewDidDisappear:(BOOL)animated{

     NSLog(@"视图被驳回后调用,覆盖或以其他方式隐藏。");

}


 

  ios 开发中视图的声明周期

viewWillAppear: 视图即将可见时调用。默认情况下不执行任何操作

viewDidAppear: 视图已完全过渡到屏幕上时调用

viewWillDisappear: 在该视图被取消、覆盖或以其他方式隐藏后调用,
viewDidLoad:在视图加载后被调用,如果是在代码中创建的视图加载器,他将会在loadView方法后被调用,如果是从nib视图页面输出,他将会在视图设置好后后被调用。

viewWillAppear:当收到视图在视窗将可见时的通知会呼叫的方法

viewDidAppear:当收到视图在视窗已可见时的通知会呼叫的方法

viewWillDisappear:当收到视图将去除、被覆盖或隐藏于视窗时的通知会呼叫的方法

viewDidDisappear:当收到视图已去除、被覆盖或隐藏于视窗时的通知会呼叫的方法

didReceiveMemoryWarning:收到系统传来的内存警告通知后会执行的方法

shouldAutorotateToInterfaceOrientation:是否支持不同方向的旋转视图

willAnimateRotationToInterfaceOrientation:在进行旋转视图前的会执行的方法(用于调整旋转视图之用)


代码的执行顺序

1、alloc创建对象,分配空间

2、init (initWithNibName) 初始化对象,初始化数据

3、loadView从nib载入视图,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

4、viewDidLoad载入完成,可以进行自定义数据以及动态创建其他控件

5、viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

6、viewDidAppear视图已在屏幕上渲染完成 当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反

1、viewWillDisappear视图将被从屏幕上移除之前执行

2、viewDidDisappear视图已经被从屏幕上移除,用户看不到这个视图了

3、dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

 

UIViewController 中,self.navigationItem.titleView.frame.size.width 的值通常会在视图控制器的视图已经完全布局并呈现之后才能获得。以下是一些相关的生命周期方法和何时可以安全地访问这个值的信息:

1. 生命周期方法

  • viewDidLoad: 在这个方法中,self.navigationItem.titleView.frame.size.width 可能还无法正确获取,因为视图尚未布局。

  • viewWillAppear:: 这个方法在视图即将呈现时调用,但此时 titleView 的大小可能仍然未确定。

  • viewDidAppear:: 在这个方法中,视图已经出现在屏幕上,但由于某些布局调整仍可能未完成,最好在这里获取它并不完全可靠。

  • viewDidLayoutSubviews: 这是获取 titleView 正确尺寸的最佳时机,因为在此方法中,视图的布局已经完成,所有子视图的位置和大小都已确定。

建议使用 viewDidLayoutSubviews

为了确保获得正确的 titleView 尺寸,建议在 viewDidLayoutSubviews 中访问 self.navigationItem.titleView.frame.size.width。以下是用法示例:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    
    CGFloat titleViewWidth = self.navigationItem.titleView.frame.size.width;
    NSLog(@"Title View Width: %f", titleViewWidth);
    
    // 这里可以安全地使用 titleViewWidth 进行布局或其他操作
}

总结

viewDidLayoutSubviews 中访问 self.navigationItem.titleView.frame.size.width 是获取该值的最快且最可靠的方式,因为此时视图的布局已经完成,确保您能够得到最新的尺寸信息。如果您需要在其他地方使用它,可以将其存储为属性,并在适当的时候更新。

posted on 2019-02-21 14:58  高彰  阅读(1083)  评论(0)    收藏  举报

导航