How can I programatically obtain the default height of an UIPickerView instance, in accordance to the resolution and orientation of the device that the app is currently running on?
I would like not to use a hardcoded value for this parameter, in the event that new devices will support different screen resolutions and thus will determine this component to have a different default size.
The warning that André saw doesn't seem to happen anymore (XCode 4.2; iOS SDK 5.0). If you create it with initWithFrame
and give it a height of zero, you can then read back it's height from the frame.height
property:
uiPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 77, 320, 0)];
DLog(@"uiPickerView=%@",uiPickerView);
gives:
uiPickerView=<UIPickerView: 0x9a28c40; frame = (0 77; 320 216); layer = <CALayer: 0x9a28d00>>
So 216 is the default height.
I couldn't find a definition for this in the headers, so reading it back seems to be the safest way.
It is possible to set a frame with a non-zero height, but Apple say don't do that, and it seems to cause rendering problems.
If you create an instance with a height of 0, it will be overridden with the appropriate default height, and you can just get its frame.size.height
.
However, on iPad this will issue a warning (tested a few days ago). I eventually had to use hardcoded values for iPad...
P.S. This was for a UIDatePicker; not sure if it's the exact same thing for UIPickerView.
With auto layout I was wondering the same due to the fact that you can't pin to the bottom of it.
The default height with no changes to an UIPickerView is 216px
You can use the frame property of the uipickerview.