[IOS]iOS 12 UIAlertController 层级变动导致的报错

参考:https://www.jianshu.com/p/e85bc5516949

 

问题所在是IOS12 UIAlertController的图层变动了.

首先看代码:

 

UIView *subView1 = alertControl.view.subviews[0];
    
    UIView *subView2 = subView1.subviews[0];
    
    UIView *subView3 = subView2.subviews[0];
    
    UIView *subView4 = subView3.subviews[0];
    
    UIView *subView5 = subView4.subviews[0];
    //IOS12 has a more uiview in subView5.subviews
    UILabel *titleView = subView5.subviews[0];
    UILabel *messageView = subView5.subviews[1];
    if ([titleView isMemberOfClass:[UIView class]]) {
        titleView = subView5.subviews[1];
        messageView = subView5.subviews[2];
    }
    
    titleView.textAlignment = NSTextAlignmentLeft;
    messageView.textAlignment = NSTextAlignmentLeft;

 

 本来这里:

UILabel *titleView = subView5.subviews[0];
UILabel *messageView = subView5.subviews[1];

 是没有问题的,但是我们在ios12打印图层发现:

2018-10-22 17:13:55.718670+0800 HKTSmartHome[1969:415473] subviews  (
    "<UIView: 0x14de7b850; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x28012bae0>>",
    "<UILabel: 0x14de8adc0; frame = (0 0; 0 0); text = 'Are you sure you want to ...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x2822529e0>>",
    "<UILabel: 0x14de7bc50; frame = (0 0; 0 0); text = 'Your Internet connection ...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x282252c10>>",
    "<UIView: 0x14de85530; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x28012bf40>>",
    "<UIView: 0x14de7bf40; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x28012bf20>>"
)

 第五层的subviews数组里面[0]是UIView而不是UILabel,发现是多了一个图层了,这就导致原来的居左布局报错了.

发现了问题,修改也很简单,就是像上面的代码,把index改成[1]就可以了,并且做一个类型判断,让IOS12以下的机型用回原来的设置.

 

补充1:类型判断:

    // 新建一个Dog对象,其中Dog是继承自Animal的
    Dog *dog = [[Dog alloc]init];
     
    // isMemberOfClass 判断是否为本类
    BOOL isDog    = [dog isMemberOfClass:[Dog class]];  // 返回YES
    // isKindOfClass   判断是否为本类或者子类
    BOOL isAnimal = [dog isKindOfClass:[Animal class]]; // 返回YES
     
    NSLog(@"%@",dog.class); // 打印dog的类名

 补充2:系统判断:

NSString *version= [UIDevice currentDevice].systemVersion;

if(version.doubleValue >=12.0) {

// 针对 12.0 以上的iOS系统进行处理

}else{

// 针对 12.0 以下的iOS系统进行处理

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值