标签: viewwillappear

为什么当应用程序从后台返回时,不会调用viewWillAppear?

我正在编写应用程序,如果用户在通话时查看应用程序,我需要更改视图.

我已经实现了以下方法:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear:");
    _sv.frame = CGRectMake(0.0, 0.0, 320.0, self.view.bounds.size.height);
}
Run Code Online (Sandbox Code Playgroud)

但是,当应用程序返回到前台时,它不会被调用.

我知道我可以实现:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

但我不想这样做.我宁愿将所有布局信息放在viewWillAppear:方法中,让它处理所有可能的场景.

我甚至试图从applicationWillEnterForeground:调用viewWillAppear:但我似乎无法确定当前哪个是当前的视图控制器.

有人知道处理这个问题的正确方法吗?我确定我错过了一个明显的解决方案.

iphone objective-c viewwillappear ios

270
推荐指数
5
解决办法
13万
查看次数

UIViewController viewDidLoad vs. viewWillAppear:什么是适当的分工?

我一直对应分配给的任务类型有点不清楚viewDidLoad对比viewWillAppear:在一个UIViewController子类.

例如,我正在做一个应用程序,我有一个UIViewController子类命中服务器,获取数据,将其提供给视图,然后显示该视图.什么是这样做的利弊viewDidLoad对比viewWillAppear

uiviewcontroller viewdidload viewwillappear ios

160
推荐指数
4
解决办法
10万
查看次数

viewWillAppear,viewDidAppear没有被调用,没有被触发

(这既是问题又是答案,因为需要花费大量时间才能找到真正的答案.)

症状:viewWillAppear,viewDidAppear没有被称为在我的UIViewController.

原因:嵌入一个UINavigationControllerUITabBarController(我的情况)以UIViewController某种方式中断调用这些方法.

解决方案:在UIViewController包含上述UINavigationController/的手动调用它们UITabBarController.

例如(假设projectNavigationController是你的UINavigationController):

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

-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated];
    [projectNavigationController viewWillDisappear:animated];
}

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

-(void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated];
    [projectNavigationController viewDidDisappear:animated];
}

在我的情况下,我有一个内部UITabBarController,我相应地调用方法,所有都解决了.

(对解决方案的归因:http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/)

iphone objective-c uitabbarcontroller viewwillappear

38
推荐指数
1
解决办法
3万
查看次数

react-navigation:检测屏幕,tabbar是否激活/出现/聚焦/模糊

当我想在屏幕打开时做一些动作时,我把它们放在componentDidMount中.例如,我可以获取一些数据.

像这样.

componentDidMount() {
  this.updateData();
}
Run Code Online (Sandbox Code Playgroud)

但是反应导航componentDidMount只在用户第一次打开屏幕时出现一次,如果以后用户再次打开此页面则不会触发componentDidMount.

检测页面(屏幕)何时被激活并执行操作的正确方法是什么?

onfocus viewdidappear viewwillappear react-native react-navigation

30
推荐指数
4
解决办法
2万
查看次数

UIView上存在哪些类似的功能方法(viewWillAppear)?

当视图即将在屏幕上显示时,在UIViewController上调用viewWillAppear.是否有可能在UIView上获得类似的回调?

objective-c uikit uiview viewwillappear ios

29
推荐指数
2
解决办法
2万
查看次数

我是否以编程方式在ViewDidAppear,ViewDidLoad,ViewWillAppear,构造函数中添加子视图?

我试图从Apple的粗略文档中找出哪种方法是初始化并将我的Views控件添加到控制器视图的最佳位置.

使用winforms它是相当简单的,因为它们总是在内部初始化InitializeDesigner,在构造函数中调用.如果可能的话,我正试图匹配这种模式的可靠性.

我工作UIViewControllersUITableViewControllers内部的UINavigationController,如果这影响了一切-大部分时间.

这是一个例子:

public MyController()
{
    // Here?
    AddViews();
}

public override ViewDidLoad()
{
    base.ViewDidLoad();

    // Or is should it be here?
    AddViews();
}

public override ViewWillAppear(bool )
{
    base.ViewWillAppear(animated);

    // Here?
    AddViews();
}

public override ViewDidAppear(bool animated)
{
    base.ViewDidLoad(animated);

    // Or maybe here?
    AddViews();
}

void AddViews()
{
    UILabel label = new UILabel();
    label.Text = "Test";
    label.Frame = new RectangleF(100,100,100,26);
    View.AddSubView(label);

    UIWebView webview = new UIWebView();
    webview .Frame …
Run Code Online (Sandbox Code Playgroud)

iphone viewdidload xamarin.ios viewdidappear viewwillappear

25
推荐指数
2
解决办法
2万
查看次数

添加为subView时,未调用UIViewController viewWillAppear

我有一个UIViewController我从另一个视图控制器内部加载,然后将其视图添加到UIScrollView.

self.statisticsController = [self.storyboard instantiateViewControllerWithIdentifier:@"StatisticsViewController"];
self.statisticsController.match = self.match;

[self.scrollView addSubview:self.statisticsController.view];
Run Code Online (Sandbox Code Playgroud)

我已经在统计视图控制器中放置断点并且viewDidLoad正在调用但viewWillAppear不是.

是因为我没有把它推到层次结构上还是什么?

objective-c uiscrollview uiviewcontroller viewwillappear ios

25
推荐指数
4
解决办法
3万
查看次数

我可以在viewWillAppear中知道它是在navigationController pop(后退按钮)之后调用的吗?

假设我有UIViewControllerA和B.用户使用push segue从A导航到B. 比用户按下后退按钮并来到A.

现在viewWillAppear称为A. 我可以在这里的代码中知道我来自后退按钮(navigationController popTo...)而不是通过其他方式吗?而且无需在B视图控制器中编写特殊代码.

objective-c viewwillappear ios

24
推荐指数
3
解决办法
9386
查看次数

viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear的指南

是否有正确使用这些方法的指导方针?特别是,我想知道我可以在其中使用什么类型的代码.

例如,如果我必须调用从WS检索数据的方法,我在哪里调用它?我在哪里可以注册/取消注册NSNotification?等等

objective-c uiviewcontroller viewdidappear viewwillappear ios

20
推荐指数
1
解决办法
2万
查看次数

ViewWillAppear中的导航栏着色在iOS 10中发生得太晚了

我面临一个奇怪的错误,只在iOS 10上发生.

我有几个画面的应用程序,每个屏幕的颜色navigationBarviewWillAppear.因此,当您进入下一个屏幕时,它将被正确着色.

但是,在iOS 10上进行测试时,我会在返回上一个屏幕时突然看到以下行为:当前一个屏幕出现时,navigationBar仍然具有上一个屏幕的颜色,然后闪烁到正确的颜色.它几乎看起来像viewWillAppear某种行为viewDidAppear.

相关代码:

视图控制器:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [ViewControllerPainter paint:self withBackground:[UIColor whiteColor] andForeground:[UIColor blackColor] andIsLight:true];

}
Run Code Online (Sandbox Code Playgroud)

画家:

+ (void)paint:(UIViewController *)controller withBackground:(UIColor *)backgroundColor andForeground:(UIColor *)foregroundColor andIsLight:(bool)isLight
{
    controller.navigationController.navigationBar.opaque = true;
    controller.navigationController.navigationBar.translucent = false;
    controller.navigationController.navigationBar.tintColor = foregroundColor;
    controller.navigationController.navigationBar.barTintColor = backgroundColor;
    controller.navigationController.navigationBar.backgroundColor = backgroundColor;
    controller.navigationController.navigationBar.barStyle = isLight ? UIBarStyleDefault : UIBarStyleBlack;
    controller.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: foregroundColor};
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?我能解决这个问题吗?这非常令人沮丧.

viewwillappear ios10

19
推荐指数
3
解决办法
5069
查看次数