У деструктивной кнопки UIActionSheet отсутствует фон

У меня есть UIActionSheet, к которому я условно добавляю кнопки. Если кнопок много (особенно для книжной ориентации), деструктивная кнопка отделяется от листа действий (как и ожидалось), позволяя элементам прокручиваться. Что неправильно, так это отсутствие предыстории.

Снимок экрана iOS7

UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:nil 
                                                  delegate:self
                                         cancelButtonTitle: nil
                                    destructiveButtonTitle:@"Changed my mind"
                                         otherButtonTitles:MAILBUTTON, BOOKMARKSBUTTON, CLEARCOOKIESBUTTON, nil];


if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
    [sheet addButtonWithTitle:CAMERABUTTON];
}

sheet.tag = ACTION_SHEET;

if ([UIPrintInteractionController isPrintingAvailable])
{
    [sheet addButtonWithTitle:PRINTBUTTON];
}   

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if ([prefs boolForKey:BUMP_ENABLED_KEY] == YES)
{
    [sheet addButtonWithTitle:BUMPRECEIVEBUTTON];
    if ([prefs boolForKey:BUMP_ALLOW_SENDING_KEY] == YES)
        [sheet addButtonWithTitle:BUMPSENDBUTTON];
}

[sheet addButtonWithTitle: @""];
[sheet setCancelButtonIndex: sheet.numberOfButtons - 1];

[sheet showInView:self.view];

В портретном режиме выглядит нормально, деструктивная кнопка имеет фон. Однако, если я добавлю намного больше кнопок, он будет вести себя так же, как показано выше.


person Chris    schedule 08.11.2013    source источник
comment
Есть такая же проблема. Вы когда-нибудь находили менее хакерское решение? Спасибо.   -  person Anas    schedule 14.01.2014
comment
@anas Нет, я остановился на этом решении. Мы несколько раз тестировали на нескольких устройствах и разных версиях ОС и не сталкивались с проблемой. Следующим лучшим решением для Apple будет устранение ошибки, IMO   -  person Chris    schedule 15.01.2014


Ответы (1)


Нашел решение, оно немного хакерское. Сначала я проверяю, ландшафтный ли он и есть ли больше 5 кнопок. Когда их 6 или более, тогда он меняется на прокручиваемый лист действий, и тогда возникает проблема. Если все это правда, я устанавливаю заголовок в пустую строку с пробелом

[sheet setTitle: @" "];

Это дает белый фон для кнопки, но оставляет нас с большим пустым пространством над ней, учитывая, что вам не нужен заголовок.

Чтобы исправить это, в willPresentActionSheet я опускаю фон.

        if (actionSheet.title)
        {
            if ([actionSheet.title.trim isEqualToString: @""])
            {
                CGRect backdropFrame = [[[actionSheet subviews] objectAtIndex: 0] frame];
                backdropFrame.origin.y += 45;
                backdropFrame.size.height -= 55;
                [[[actionSheet subviews] objectAtIndex: 0] setFrame: backdropFrame];
            }
        }
person Chris    schedule 12.11.2013