You should try the bar button presentation method.
When using presentPopoverFromRect:inView:
the frame provided would usually be your button (as you have it) but the view would be the button superview (not the root view). This is because the frame needs to amen something in the coordinate space of the provided view.