IOS

iOS13原生端适配攻略(推荐)

2019-10-11
随着iOS 13的发布,公司的项目也势必要着手适配了.现汇总一下iOS 13的各种坑 1. KVC访问私有属性 这次iOS 13系统升级,影响范围最广的应属KVC访问修改私有属性了,直接禁止开发者获取或直接设置私有属性.而KVC的初衷是允许开发者通过Key名直接访问修改对象的属性值,为其中最典型的 UITextField 的 _placeholderLabel.UISearchBar 的 _searchField. 造成影响:在iOS 13下App闪退 错误代码: // placeholderL

iOS13即将到来,iOS推送DeviceToken适配方案详解

2019-09-27
随着苹果iOS13系统即将发布,个推提前推出DeviceToken适配方案,以确保新版本的兼容与APP推送服务的正常使用.iOS13的一个重要变化是"[deviceToken description]" 会受不同运行环境及系统的影响而发生变化,如果未及时做好适配工作,会导致SDK绑定到错误的DeviceToken,从而影响APN推送.请各位开发者根据当前运行环境做出相应的更新与优化,以保障用户在iOS13系统上有更好的使用体验. 在Xcode11.iOS13运行时"[devi

详解iOS中跨页面状态同步方案比较

2019-09-23
由于团队希望项目能够去 CoreData 化,而以往状态同步都是依赖于 CoreData 的NSFetchedResultsController.因此去 CoreData 则必须寻找一种替代方案来进行状态同步. NotificationCenter 状态同步实际是一对多的场景,也就是一个事件可以被多个观察者监听到.而苹果的系统框架自带的 NotificationCenter 正是用来适配这种场景,并且其也是被系统框架本身及我们开发者大面积使用的.用法如下: 定义通知名字,以及需要额外传递信息的

iOS 13适配汇总(推荐)

2019-09-18
随着iPhone 11的发布,iOS 13适配也提上了日程,接下来就开发中升级iOS13的手机可能出现的问题 Xcode: 11.0 iOS : 13.0 UIViewController 模态弹出界面 viewController.present(presentVC, animated: true, completion: nil) 在调用模态弹出视图,会发现弹出的界面没有全屏.如图 通过多次的尝试,发现在低版本里面不会发生这种情况(iOS12及以下),于是我查阅了最新的开发文档,发现了端倪,

解决iOS13 无法获取WiFi名称(SSID)问题

2019-09-11
升级到iOS13以后,发现之前获取WiFi名称的接口失效了,返回的都是固定值"WLAN".这里可能是因为苹果对用户隐私保护问题,因为通过wifi信息可以定位到用户地理位置.所以iOS13以后如果想要继续获取WiFi名称,需要在调用接口前判断用户是否同意app使用地理位置信息. 我这里只在第一次使用时提示: NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; CGFloat version = [phone

iOS导航栏对控制器view的影响详解

2019-09-11
前言 当我们设置导航栏的某些属性的时候会导致控制器View的布局不是从window的 (0,0)点开始布局,会从导航栏底部开始布局,而此时在 viewDidLoad 中 获取到View的frame 确实从(0,0)开始的,只有在 viewDidAppear中才能获取到 view 最终的实际 frame 一些属性 在了解 UINavigationBar之前,有必要了解 UINavigationBar 的一些属性 ///默认 default 半透明 black 黑色 open var barStyl

浅谈iOS开发如何适配暗黑模式(Dark Mode)

2019-09-09
暗黑模式 原理 将同一个资源,创建出两种模式的样式.系统根据当前选择的样式,自动获取该样式的资源 每次系统更新样式时,应用会调用当前所有存在的元素调用对应的一些重新方法,进行重绘视图,可以在对应的方法做相应的改动 资源文件适配 创建一个Assets文件(或在现有的Assets文件中) 新建一个图片资源文件(或者颜色资源文件.或者其他资源文件) 选中该资源文件, 打开 Xcode ->View ->Inspectors ->Show Attributes Inspectors (或者Opt

iOS13适配的实现方法

2019-09-09
1.私有KVC [self setValue:baseTabBar forKey:@"tabBar"]; //正常 [_textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];///崩溃 [_textField setValue:[UIFont systemFontOfSize:14] forKeyPath:@"_placeholderLabel.fo

iOS模拟中奖名单循环滚动效果

2019-09-07
本文实例为大家分享了iOS模拟中奖名单循环滚动效果的具体代码,供大家参考,具体内容如下 1.动态效果图: 2.思路: (1)控件:一个父View,依次添加两个tableVew,使其上下紧挨着,高度均等于所有cell的总高度,且加载相同的的数据,父视图的clipsToBounds属性一定要设置为true (2)滚动:使用计时器,调整时间及滚动大小,使展示平滑 (3)循环算法:当A列表滚动出界面时,就把它添加在B列表的下面,B列表滚动出界面时,就把它添加在A列表的下面,形成循环效果 3.Swift版

iOS实现文本分页的方法示例

2019-09-04
前言 本篇文章将分为两部分,一部分是静态文本分页,一部分是动态文本分页即边填写文本边进行文本的分页. 我们所采用的方案为:TextKit进行处理,通过glyphRangeForTextContainer方法获取文本内容视图可容纳的文本范围来对文本进行切割分页. // Returns the range of characters which have been laid into the given container.  This is a less efficient method than

iOs迁至WKWebView跨过的一些坑

2019-09-04
前言 在iOS中有两种网页视图可以加载网页除了系统的那个控制器.一种是UIWebView,另一种是WKWebView,其实WKWebView就是想替代UIWebView的,因为我们都知道UIWebView非常占内存等一些问题,但是现在很多人还在使用UIWebView这是为啥呢?而且官方也宣布在iOS12中废弃了UIWebView让我们尽快使用WKWebView.其实也就是这些东西:**页面尺寸问题.JS交互.请求拦截.cookie带不上的问题.**所以有时想要迁移还得解决这些问题,所以还是很烦的

iOS调试Block引用对象无法被释放的小技巧分享

2019-09-04
Block技术在iOS开发中非常流行也很方便,但是稍微疏忽就可能会产生引用无法被释放的问题,从而造成内存泄漏.那如何知道哪个Block持有了对象并造成内存泄漏呢? 一个解决的方法是在程序运行时通过Xcode的Debug Memory Graph 来查看当前进程中所有生命周期内的对象.这样可以在调试时通过这个功能发现一些本来应该被释放但是却没有被释放的对象.从而确定哪些对象有内存泄漏的嫌疑. 当点击某个对象时,右边可以看出这个对象的内存分配情况以及被引用的情况,从而可以进一步跟踪确认出对象是被谁持

详解MacOs免密登录CentOs操作步骤

2019-09-02
MacOs免密登录CentOs 环境 本文操作的环境如下: CentOs 7 MacOs10.12.6 生成秘钥 首先在本机生成秘钥,打开终端,输入: ssh-keygen -t rsa -C xxxxx@qq.com 后面的邮箱随意就可以 然后一直按回车键,执行结束后会在当前用户根目录下面生成一个.ssh的隐藏文件夹 我们查看一下这个文件夹 wangjianfengdeiMac:~ wangjianfeng$ cd ~/.ssh wangjianfengdeiMac:.ssh wangjian

iOS组件依赖避免冲突的小技巧分享

2019-09-01
问题缘由 本文以 YBImageBrowser[1] 组件举例. YBImageBrowser 依赖了 SDWebImage,在使用 CocoaPods 集成到项目中时,可能会出现一些依赖冲突的问题,最近社区提了多个 Issues 并且在 Insights -> Traffic -> Popular content 中看到了此类问题很高的关注度,所以不得不着手解决. 严格的版本限制 一个开源组件的迭代过程中,保证上层接口的向下兼容就不错了.为了优化性能并且控制内存,YBImageBrowser

iOS代码瘦身实践之如何删除无用的类

2019-08-25
前言 本文将提供一种静态分析的方式,用于查找可执行文件Mach-o中未使用的类,源码链接:xuezhulian/classunref (本地下载). Mach-o文件中__DATA __objc_classrefs段记录了引用类的地址,__DATA __objc_classlist段记录了所有类的地址,取差集可以得到未使用的类的地址,然后进行符号化,就可以得到未被引用的类信息. 引用类地址 可以通过Mac自带的工具otool打印Mach-o中的段信息,需要注意的是模拟器和真机对应的可执行文件,数

iOS实现文字水平无间断滚动效果

2019-08-25
IOS跑马灯效果,实现文字水平无间断滚动,示例代码如下: ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController{ NSTimer *timer; UIScrollView *scrollViewText; } @property (nonatomic ,strong) NSArray *arrData; @end ViewController.m // // ViewContr

iOS常见宏理解及使用方法

2019-08-08
FOUNDATION_EXPORT, UIKIT_EXTERN 该宏的作用类似于extern,使用方法也与extern类似,在.m文件中,定义如下 NSString *const kFoundationExportString = @"Hello World"; NSString *const kExternString = @"Hello World"; 然后在.h文件中加上以下声明, 就可以在导入该.h文件的类中访问该常量. FOUNDATION_EXPORT

iOS动态更换Icon的全过程记录

2019-08-06
iOS 动态更换Icon 动态切换 App 的 icon 这个需求,在上一家公司做一款定制 App 时遇到过一次,这次领导说可能需要做,就又做了一次.虽然不是什么很难的知识点,这里也就记录一下自己做的过程吧. info.plist 文件编辑 更换 Icon 静默切换 info.plist 文件 为了动态更换 icon,我们需要先配置一下我们项目的 info.plist 文件: 1.加入 Icon files(iOS5),其中会默认有两个 item: Newsstand Icon Primary

iOS 弹幕功能的实现思路图解

2019-07-24
先来看一张效果图(LICEcap录制的有点卡, 凑合看) 理一下大概流程: 接下来实现: 弹幕视图从底部弹上来, 依次动画向上滚动, 出屏幕就移除加入重用队列, 下次使用. 定义相关属性: 1. 根据弹幕区域, 确定总共需要的弹幕itemView个数(总区域高度/最小高度),并添加到弹幕控件底部 追加一条新数据(由于需要动画处理, 当前数据动画完成后才能处理下一条数据,这里需要定义两个区:正在处理区和等待处理区) 追加数据并弹出 从处理区取出itemView并初始化其将要展示的位置,计算宽高,

iOS常用算法之两个有序数组合并(要求时间复杂度为0(n))

2019-07-17
思路: 常规思路: 先将一个数组作为合并后的数组, 然后遍历第二个数组的每项元素, 一一对比, 直到找到合适的, 就插入进去; 简单思路: 设置数组C, 对比A和B数组的首项元素, 找到最小的, 就放入数组C,依次进行下去. 代码如下: - (NSArray *)mergeOrderArrayWithFirstArray: (NSMutableArray *)array1 secondArray: (NSMutableArray *)array2 { // 全为空不处理 if (!array1.