Sticky UIPickerView

December 22nd, 2010

Recently on an application I came across an issue where when I showed a UIPickerView inside an action sheet the bottom half(ish) of the pickerview wasn't selectable. I had came across this before when showing buttons in an UIActionSheet and had overcome it by moving the button slightly higher up the UIActionSheet. on that project I didn't have enough time to investigate what was causing and was only to hope to hold onto my hack, however when the same issue reared its head again, I decided to crack it. Messing with where my UIPickerView started produced the same "working" functionality as had moving the buttons up however it also destroyed my UI, by leaving a large black space at the bottom of my UIActionSheet. Staring at the UI I suddenly noticed the faded tabbar sitting underneath and it occurred to me that this was causing all my trouble somehow it was creating a no-go zone even through it was off the screen and that the adjustment I had made to where the UIPickerView started just happened to be the same height as the tabbar.

This made my hack feel more concrete and understandable however what if Apple changed the height of the tabbar all my applications would become unresponsive. Up until this point when I wanted to show the UIActionSheet I was using this method call:

[actionSheet showInView:self.view];

However reading through the Apple documentation I discovered a more robust method:

[actionSheet showFromTab:self.tabBarController.tabBar];

Using the above method I was able to remove all the messy frame creation that I had been relying upon and also forward proof my application in-case apple did change the height of the navigation bar.

What do you think? Let me know by getting in touch on Twitter - @wibosco