Xcode iPad UIActionSheet со многими кнопками не отображается правильно iOS7
На iPad новый iOS 7 UIActionSheet отображается неправильно с большим количеством кнопок.
Не очистка фона строки UIActionSheet при прокрутке. Кнопки кажутся замороженными в фоновом окне UIActionSheet.
снимок экрана с проблемой
Мой код:
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];
Ответы
Ответ 1
Это было моим обходным решением для делегата actionSheet:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
actionSheet.backgroundColor = [UIColor whiteColor];
for (UIView *subview in actionSheet.subviews) {
subview.backgroundColor = [UIColor whiteColor];
}
}
Основываясь на этом ответе:
Изменить цвет текста в кнопках UIActionSheet
Ответ 2
Смешная вещь - эта ошибка все еще существует в iOS 7.1beta4:)
И не появляется в iPhone, только iPad...
И его происхождение довольно странно - эффект "размытости" отображается, когда UIActionSheet имеет так много элементов, поэтому их нужно поместить в контейнер UITableView но, к сожалению, этот контейнер представления помещается дважды (и это не тот же экземпляр).
Поэтому нам нужно оставить только один и удалить других.
Мы должны исправить значение Antoher, это высота UITableView.
Ниже моего исправления - реализовать в UIActionSheetDelegate - (void) 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];
}
}
}
}
}
}