Adding a UIActivityIndicator on UINavigationBar
The accepted answer here made it work:
http://stackoverflow.com/questions/1719533/add-uiactivityindicatorview-into-uibarbutton
seen from Argentina
seen from Russia

seen from Mexico
seen from United States
seen from United States
seen from Singapore
seen from Netherlands
seen from China
seen from China

seen from Netherlands
seen from China
seen from United States
seen from China
seen from Netherlands
seen from United States
seen from United States

seen from Singapore
seen from France
seen from Japan
seen from Netherlands
Adding a UIActivityIndicator on UINavigationBar
The accepted answer here made it work:
http://stackoverflow.com/questions/1719533/add-uiactivityindicatorview-into-uibarbutton
UIActivityIndicatorView over an UIButton
Did you know that putting an UIActivityIndicatorView over a UIButton, all touch events are blocked by the spinner?
If you do the same with a UILabel or UIImageView, all events are forwarded to the button (its superview), like I (and you) expect. But with UIActivityIndicatorView this is not the behaviour you get. All these classes are extensions of UIView, so why they work differently?
The key difference is that the UIActivityIndicatorView is animated. When you have an animated view, iOS changes its userInteractionEnabled property to YES to prevent interactions (and interruptions) from the user with that view, during the animation phase.
How to fix that? Just set userInteractionEnabled to NO on the spinner, so all the touch events are forwarded again to the spinner superview (the button in my case) and everything works like I expect.
Here is the example code
spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[spinner startAnimating];
[spinner setUserInteractionEnabled:NO]; // setting UserInteractionEnable to NO, any touch events are forwarded to the superview (the button)
spinner.center = CGPointMake(20, 18);
[self addSubview:spinner];
Bug fixed. Let's move on...