6

我正在使用基于 UIImageView 的动画来显示自定义活动指示器。以下代码负责设置:

+ (void)startLoadingActivity:(UIViewController *)vc {
    vc.parentViewController.navigationItem.titleView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)];
}

这是UIImageView+Animation类别的要点。

每当我开始一个网络请求时,我都会启动活动指示器,而每当请求完成时,我都会通过将titleView属性设置为来停止它nil

结果是这样的:

好的

请求方法也被调用到-viewDidAppear:视图控制器的方法中。

但是,每当动画在过渡期间开始时,似乎 的位置UIImageView是错误的。

以下结果显示了问题:

请注意活动指示器是如何显示在“组”按钮顶部的。

KO

这个问题来自哪里?我该如何解决?

4

2 回答 2

0

我认为问题在于,尽管您将 titleView 设置为 nil,但您并没有从视图中删除加载程序,因此它的框架转到 (0,0) 位置。

尝试以下操作:

+ (void)startLoadingActivity:(UIViewController *)vc {
    UIImageView *imageView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)];
    imageView.tag = 999;
    vc.parentViewController.navigationItem.titleView = imageView;
}

并且每当设置

titleView = nil

也做

[[self.navigationController.view viewWithTag:999] removeFromSuperView];
于 2015-04-12T19:20:37.420 回答
0

这个问题是这个问题的很好的演示,答案在这里: Stackoverflow title move while push/pop of viewcontroller

长话短说:

  1. 使用 UIView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin
  2. 不要在“viewWillAppear:”中执行(在 viewDidLoad 中执行 / 在 DidAppear 或更高版本中更新)
于 2017-08-07T11:09:14.370 回答