iOS 8.4.1 遇上的系统bug,UIalertController问题记录-解决之道

今天折腾了半天的问题,百尺竿头更进一步.

bug现象-在iOS8 系统上出现

1.追根溯源

UIalertcontroller里面添加的textfield旁边会有两个黑色的框,自己拆视图(Debug View 就是xcode的功能)发现里面有一个tableview.里面cell的背景色是黑色

2.找它

2.1>通过runtime 找不到这个tableView

   unsigned int numIvars; //成员变量个数
             
   Ivar *vars = class_copyIvarList(NSClassFromString(@"UIAlertController"), &numIvars);
             
           //Ivar *vars = class_copyIvarList([UIView class], &numIvars);   
          NSString *key=nil;
             
                 for(int i = 0; i < numIvars; i++) {

                 Ivar thisIvar = vars[i];
                 
                         key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];  //获取成员变量的名字
                 
                         NSLog(@"variable name :%@", key);
                 
                         key = [NSString stringWithUTF8String:ivar_getTypeEncoding(thisIvar)]; //获取成员变量的数据类型
                 
                         NSLog(@"variable type :%@", key);
                 
                     }
                 free(vars);

2.2>循环遍历子视图

首先判断是不是8的系统

     if (SYSTEM_VERSION_LESS_THAN(@"9.0"))
             {//循环遍历方法
                 [self wipeOutBlackColorInIOS8WithView:alert.view];
             }
-(void)wipeOutBlackColorInIOS8WithView:(UIView *)fatherview
{
    for (UIView *view in fatherview.subviews)
    {
        NSLog(@"view_class:%@",NSStringFromClass([view class]));
        
        if ([NSStringFromClass([view class]) isEqualToString:@"_UIAlertControllerShadowedScrollView"])
        {
            
        }
        if ([view isKindOfClass:[UITableView class]])
        {
            UITableView *tableView =(UITableView *)view;
            NSInteger sections = tableView.numberOfSections;
            for (int section = 0; section < sections; section++)
            {
                NSInteger rows =[tableView numberOfRowsInSection:section];
                for (int row = 0; row < rows; row++)
                {//找到tableView 改变cell背景色
                    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
                    UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];
                    [cell setBackgroundColor:kClearColor];
                }
            }
        }
        else
        {
            if (view.subviews.count)
            {
                [self wipeOutBlackColorInIOS8WithView:view];
            }
        }
    }
}

坚持就是胜利

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,012评论 3 119
  • 二十岁后的五年时光 一个地方一千多个不同的角度,可能会在哪一天我会忘了自己,唯独忘不了我们的郊山司令部 什么时候我...
    苹果O_O阅读 152评论 0 0
  • 泰诺和美霖,是两种儿童退热药,可以交替使用。周六一晚过的还算安稳,女儿的体温降到了37度左右。 女儿睡到8点多,醒...
    领导力倡导者阅读 275评论 4 0