带有许多按钮的 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 中带有完成按钮的 UIPickerView

Xcode 6.3 故事板自动布局约束

iPhone/iPad 项目 xCode

将 iPad Playground 转换为 Xcode 10 Playground

带有 iOS 9 设备的 Xcode 7 错误:设备不可用(找不到开发者磁盘映像)

带有 PopOver 控件的 IPad 按钮下拉菜单