参考: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系统进行处理 }
相关推荐
在iOS开发中,UIAlertController是iOS 8及更高版本中引入的一个重要组件,用来替代了之前的UIAlertView和UIActionSheet。这个"ios-iOS 9最新的UIAlertController.zip"文件可能包含了关于如何在iOS 9中使用...
在iOS开发中,UIAlertController是苹果提供的一种用于展示警告或者动作表单的系统组件,它替代了之前的UIAlertView和UIActionSheet。然而,系统的UIAlertController在默认情况下,其Title、Message和UIAlertAction的...
在iOS开发中,UIAlertController是苹果提供的一种用于展示警告或者动作表单的系统控制器,它替代了之前的UIAlertView和UIActionSheet。这个“ios-系统UIAlertController常用.zip”压缩包文件包含了一个关于...
[查看博客](https://blog.csdn.net/hurryupcheng) [查看github](https://github.com/jolincheng) [查看简书](https://www.jianshu.com/u/2add458bf239)
在iOS开发中,`UIAlertController`是用于展示警告框和操作表的重要类,它替代了之前的UIAlertView和UIActionSheet。这个demo项目显然旨在演示如何在应用程序中正确使用`UIAlertController`,并处理屏幕方向变化的...
操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...
iOS10系统越狱后抹机导致cydia报错Could not open file /var/lib/dpk 包含内容: iFunBox_1.9.dmg lib.zip mobileterminal_1.0_beta1_iphoneos-arm.deb MobileTerminal.ipa README.md 包含使用说明: iOS10系统越狱...
在iOS开发中,UIAlertController是苹果提供的一种用于展示警告或者用户交互操作的系统组件。它替代了之前的UIAlertView和UIActionSheet。本教程将详细介绍如何在iOS应用中封装UIAlertController,以便自定义...
在iOS开发中,`UIAlertView`和`UIAlertController`是两种常用的弹窗组件,用于向用户展示警告信息或者进行简单的交互。这两个组件在不同版本的iOS系统中有着不同的使用方式和表现形式。本篇将深入探讨如何实现`...
但是,`UIAlertController`是私有类,直接继承可能会导致审核被拒,所以这种方式并不推荐。 2. **代理方法**:可以利用`UIPopoverPresentationController`的代理方法来控制弹出视图的方向。首先,将`...
在iOS开发中,UIAlertController是苹果自iOS 8起引入的一个新组件,它取代了旧的UIAlertView和UIActionSheet。这个“ios-UIAlertController 的封装.zip”文件提供了一个方便的封装,使得开发者能够更容易地在他们的...
### Xcode模拟器下载地址(iOS 8 - iOS 12) #### 一、Xcode模拟器概述 Xcode 是苹果公司为开发者提供的官方集成开发环境(IDE),它支持多种编程语言,包括Objective-C、Swift等,主要用于开发iOS、macOS、...
在iOS开发中,Swift语言是首选的编程工具,而UIButton和UIAlertController是两个核心的UI组件,用于构建用户交互界面。这篇详细的讲解将带你深入理解这两个控件的使用方法,以及如何自定义UIAlertController的样式。...
在iOS 9中,UIAlertController在功能上是和UIAlertView以及UIActionSheet相同的,UIAlertController以一种模块化替换的方式来代替这两货的功能和作用。 同创建UIAlertView相比,我们无需指定代理,也无需在初始化...
在iOS开发中,UIAlertController是苹果提供的一种用于展示警告或者动作表单的API,它取代了之前的UIAlertView和UIActionSheet。这个"ios-一行代码使用UIAlertController.zip"资源包含了一个名为"STAlertView.swift...
这里提到的"iOS12真机调试包"是针对iOS 12操作系统的一个关键组件,主要用于Xcode集成开发环境。 Xcode是Apple官方提供的开发工具,用于构建iOS、iPadOS、macOS、watchOS和tvOS的应用程序。在Xcode中,真机调试功能...
苹果在iOS8推出了全新的UIAlertController,旧的UIAlertView和UIActionSheet渐渐被废弃,但如果你仍然支持iOS7系统,你将不得不写两套代码。这个库解决了这个问题。 Github地址:...
在iOS开发中,UIAlertController是苹果提供的一种用于展示警告或者动作表单的API,它取代了之前的UIAlertView和UIActionSheet。然而,UIAlertController在默认情况下功能相对基础,开发者经常需要自定义其外观和行为...