2013-09-26 4 views
15

На iPad новый ios 7 UIActionSheet отображается неправильно с большим количеством кнопок.Xcode iPad UIActionSheet со многими кнопками не отображается правильно iOS7

Не чистка фона UIActionSheet на прокрутку. Кнопки выглядят замороженными в фоне UIActionSheet.

screenshot with problem

Мой код:

UIActionSheet *popupQuery = [[UIActionSheet alloc]; 
for (int i=0; i<[ParamAllList count]; i++) 
{ 
    NSMutableDictionary *Param = [ParamAllList objectAtIndex:i]; 
    [popupQuery addButtonWithTitle:[Param valueForKey:@"name"]]; 
    [[[popupQuery valueForKey:@"_buttons"] objectAtIndex:[[popupQuery valueForKey:@"_buttons"] count]-1] setImage:[UIImage imageNamed:@"add40icon.png"] forState:UIControlStateNormal]; 
} 
popupQuery.actionSheetStyle = UIActionSheetStyleAutomatic; 
[popupQuery showFromRect:Button_Settings.frame inView:Button_Settings.superview animated:YES]; 
+0

пожалуйста, добавьте код, когда вы создаете свой UIActionSheet –

+0

UIActionSheet * popupQuery = [[UIActionSheet Alloc]; for (int i = 0; i <[ParamAllList count]; i ++) { NSMutableDictionary * Param = [ParamAllList objectAtIndex: i]; [popupQuery addButtonWithTitle: [Параметр valueForKey: @ "name"]]; [[[popupQuery valueForKey: @ "_ buttons"] objectAtIndex: [[popupQuery valueForKey: @ "_ buttons"] count] -1] setImage: [UIImage imageNamed: @ "add40icon.png"] forState: UIControlStateNormal]; } popupQuery.actionSheetStyle = UIActionSheetStyleAutomatic; [popupQuery showFromRect: Button_Settings.frame inView: Button_Settings.superview animated: YES]; – Constantinus

+0

Я вообще делаю то же самое без изображения: даже если я это делаю: UIActionSheet * popupQuery = [[UIActionSheet alloc] initWithTitle: @ "test" delegate: self cancelButtonTitle: @ "" destructiveButtonTitle: @ "Отменить" otherButtonTitles : @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi" , @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", @ "hi" , @ "hi", @ "hi", @ "hi", @ "hi", @ "hi", nil]; Это беспорядок происходит именно так ... Что-то делать с количеством кнопок. – dan

ответ

24

Это был мой обходной путь для делегата actionSheet:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    actionSheet.backgroundColor = [UIColor whiteColor]; 
    for (UIView *subview in actionSheet.subviews) { 
     subview.backgroundColor = [UIColor whiteColor]; 
    } 
} 

Основе этого ответа: Change Text color in UIActionSheet Buttons

+2

- (void) willPresentActionSheet: (UIActionSheet *) actionSheet { int count = 0; для (UIView * объект в действииSheet.subviews) { if ([[[класс объекта] описание] isEqualToString: @ "UIView"]) { count ++; if (count == 2) { object.backgroundColor = [UIColor whiteColor]; break; } } } } – Constantinus

+0

спасибо))))) мой код оставляет немного прозрачный фон. – Constantinus

+2

Хорошая работа вокруг, стыдно, что такая проблема существует. Благодарю. – mashdup

2

Забавная вещь - эта ошибка л существует в IOS 7.1beta4 :)
И не появляется в реализации iPhone, только IPAD ...

И его происхождение довольно странно - «размыто» эффект показывает, когда UIActionSheet имеет так много элементов , поэтому их нужно поместить в контейнер UITableView, но, к сожалению, этот контейнер представления помещается дважды (и это не тот же экземпляр). Поэтому нам нужно оставить только один и удалить другие.

Antoher вещь, которую мы должны исправить, это UITableView высота.

Ниже мое исправление - реализовать в UIActionSheetDelegate - (Недействительными) willPresentActionSheet:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
     if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
      // fix for iOS7 iPad UIActionSheet presentation when content need to scroll 
      // and scrolled view appears with unnecessary copies, remove not needed ones 
      // and set proper tableview height too 
      int count = 0; 
      for (UIView *subview in actionSheet.subviews) { 
       if([subview isMemberOfClass:[UIView class]]) { 
        if(++count == 1) { 
         // process only first view 
         for(UIView *subsubview in subview.subviews) { 
          if([subsubview isKindOfClass:[UITableView class]]) { 
           // fix table view height 
           UITableView *tableView = (UITableView*)subsubview; 

           CGRect tableViewFrame = tableView.frame; 
           tableViewFrame.size.height -= subview.frame.origin.y; 

           tableView.frame = tableViewFrame; 
          } 
         } 
        } else { 
         // remove unnecessary view 
         [subview removeFromSuperview]; 
        } 
       } 
      } 
     } 
    } 
} 
+0

Не работает для меня (iOS 7.1), результатом является только размытый белый фон (без tableView). – osxdirk

Смежные вопросы