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

seen from Malaysia
seen from China
seen from United States
seen from United States
seen from Singapore
seen from United Kingdom
seen from Serbia

seen from South Korea

seen from United States
seen from China
seen from China
seen from Hong Kong SAR China

seen from United States
seen from China

seen from Singapore
seen from China
seen from Germany

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

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
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...