UIActionSheet is not showing separator on the last item on iOS 7 GM
I think ActionSheet requires a cancel button.So you can add the cancel button title.
Another way is: Specify actionSheet's cancelButtonIndex.
For example,in your case, you can add a "Cancel" in otherButtonTitles at index 4 and then specifiyactionSheet.cancelButtonIndex = 4.
I found a way to make it work on iPhone and iPad in the least hacky way:
- Only init the UIActionSheet with a title
- Add your buttons
- Add a "CANCEL" button at last
- set the CancelButtonIndex to that last index
I assume that the missing separator is caused by the cancel button not being recognized as a separate case when adding it first or through the init.
I found that adding a cancel button with an empty string after initialization works. The cancel button won't show up and the separator shows up.
[sheet addButtonWithTitle: @""];[sheet setCancelButtonIndex: sheet.numberOfButtons - 1];
But this only works for iPad. On iPhone, an empty cancel button shows up, but I found a hacky workaround to make it work. In addition to the above, in willPresentActionSheet
add this code in:
NSInteger offset = 55;CGRect superFrame = actionSheet.superview.frame;superFrame.origin.y += offset;[actionSheet.superview setFrame: superFrame];// hide underlay that gets shifted with the superview[(UIView*)[[actionSheet.superview subviews] objectAtIndex: 0] removeFromSuperview];// create new underlayCGRect underlayFrame = CGRectMake(0, -offset, superFrame.size.width, superFrame.size.height);UIView* underlay = [[UIView alloc] initWithFrame: underlayFrame];underlay.alpha = 0.0f;[underlay setBackgroundColor: [UIColor colorWithWhite: 0.0f alpha: 0.4f]];[actionSheet.superview insertSubview: underlay atIndex: 0];// simulate fade in[UIView animateWithDuration: 0.3f animations:^{ underlay.alpha = 1.0f;}];
This shifts down the sheet to hide the cancel button off the screen