UINavigationBar titleView中iOS 6和UIActivityIndi​​cator的问题

Ben*_*Ben 5 uinavigationitem uiactivityindicatorview ios6

从iOS 6开始就遇到了这个问题.我无法弄清楚是什么原因会导致这种行为发生变化.这曾经在5中完美地运作.现在活动指标不及时或根本没有出现.任何帮助将非常感激.

-(void)myMethod
{
    UIView *currentTitleView = [[self navigationItem] titleView];


    // Create an activity indicator and start it spinning in the nav bar
    UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

    [[self navigationItem] setTitleView:aiview];
    [aiview startAnimating];

    // Start of Block code
    void (^block)(arg1, arg2) =
    ^(arg1, arg2)
    {
       block code;
       [aiview stopAnimating];
       [[self navigationItem] setTitleView:currentTitleView];
    };
// End of Block code




}
Run Code Online (Sandbox Code Playgroud)

jsz*_*ski 0

听起来像是myMethod从后台线程调用的。作为一般规则,与 UIKit 元素(包括UIActivityIndicatorView)的所有交互都应始终在主线程上完成。尝试使用 GCD 将 UI 代码移动到主队列(也称为主线程)。

-(void)myMethod {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIView *currentTitleView = [[self navigationItem] titleView];

        // Create an activity indicator and start it spinning in the nav bar
        UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

        [[self navigationItem] setTitleView:aiview];
        [aiview startAnimating];
    });

    // Start of Block code
    void (^block)(arg1, arg2) =
    ^(arg1, arg2)
    {
       block code;

        dispatch_async(dispatch_get_main_queue(), ^{
           [aiview stopAnimating];
           [[self navigationItem] setTitleView:currentTitleView];
        });
    };
// End of Block code
}
Run Code Online (Sandbox Code Playgroud)