带有许多按钮的 Xcode iPad UIActionSheet 无法正确显示 iOS7
Posted
技术标签:
【中文标题】带有许多按钮的 Xcode iPad UIActionSheet 无法正确显示 iOS7【英文标题】:Xcode iPad UIActionSheet with many buttons do not correctly displayed iOS7 【发布时间】:2013-09-26 10:34:57 【问题描述】:在 iPad 上,新的 ios 7 UIActionSheet 无法正确显示很多按钮。
滚动时不清理 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];
【问题讨论】:
请在创建 UIActionSheet 时添加代码 UIActionSheet *popupQuery = [[UIActionSheet alloc]; for (int i=0; i 我基本上在做同样的事情没有图片:即使我这样做: UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:@"test" delegate:self cancelButtonTitle:@""破坏性ButtonTitle:@"Cancel" otherButtonTitles:@"hi", @"hi", @"hi", @"hi", @"hi", @"hi", @"hi", @"hi", @"嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,@“嗨”,无];它像这样搞砸了....与按钮的数量有关。 当按钮的数量适合而无需滚动时 - 一切正常。当一个滚动按钮- 然后背景消失。浏览 UIActionSheet 的子视图 - 并意识到 UIActionSheet 对象只包含标签和按钮(没有 tableView 或滚动视图) - 因此这个错误系统。 您是否为此提交了雷达文件? 【参考方案1】:这是我对 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
【讨论】:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet int count=0; for (UIView *object in actionSheet.subviews) if ([[[object class] description] isEqualToString:@"UIView"]) count++; if (count==2) object.backgroundColor = [UIColor whiteColor];休息; thanks))))) 我的代码留下了一点透明的背景。 很好的解决方法,很遗憾存在这样的问题。谢谢。【参考方案2】:有趣的事情 - 这个错误仍然存在于 iOS 7.1beta4 :) 并且没有出现在 iPhone 实现中,只有 iPad...
而且它的起源很奇怪——当 UIActionSheet 有这么多项目时会显示“模糊”效果,因此它必须将这些项目放在类似 UITableView 的容器中,但不幸的是,这个视图容器被放置了两次(它不是同一个实例)。 所以我们只需要留下一个并移除其他的。
我们需要纠正的另一件事是 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];
【讨论】:
对我不起作用(iOS 7.1),结果只是一个模糊的白色背景(没有 tableView)。以上是关于带有许多按钮的 Xcode iPad UIActionSheet 无法正确显示 iOS7的主要内容,如果未能解决你的问题,请参考以下文章
将 iPad Playground 转换为 Xcode 10 Playground