iOS

iOS

TableHeaderView 使用 AutoLayout 自适应高度

在 viewDidLayoutSubViews() 中设定 headerView 的高度 override func viewDidLoad() { self.headerView = (Bundle.main.loadNibNamed("CreateOrderTableHeaderView", owner: self, options: nil)![0] as? CreateOrderTableHeaderView) } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() sizeHeaderToFit() } func sizeHeaderToFit() { if let headerView = tableView.tableHeaderView { headerView.setNeedsLayout() headerView.layoutIfNeeded() let h

By Jon

iOS

React Native RCTValueAnimatedNode.h file not found 问题修复

原因 官方代码库里 RCTNativeAnimatedNodesManager.h中 import 了错误的头文件。 GitHub 上相关的 issue 日期是2017年3月,截止本文写作时的2017年9月27日,该问题仍未解决。 * GitHub issue:[iOS][cocoapods] 'RCTAnimation/RCTValueAnimatedNode.h' file not found #13198 * 本文使用的 React Native 版本:0.48.3 解决方法 解决方法是在 package.json 中添加一个指令,修复 ReactNative 源代码中的错误: { "name": "YourProject", "version": "

By Jon

iOS

UIImage Rendering Mode

最近调第三方代码的过程中发现,有一个 UIImage,无论将图片替换成什么,在页面上始终显示成蓝色。经过代码阅读,终于发现了猫腻: [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 简化版代码: theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [theImageView setTintColor:[UIColor redColor]]; theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [theImageView setTintColor:[UIColor redColor]]; WatchKit 中的使用 In WatchKit for Apple Watch apps

By Jon

iOS

XcodeGhost 代码分析

最近几天 Xcode Ghost 事件炸开了锅。 事情源自知名 iOS 开发者唐巧的一条微博(2015-09-17 09:45,周四): 临近周末,自称是原作者的微博用户发表了公告,表示这只是一次没有恶意的试验,同时还将源代码放到了 GitHub 上。微博发送的时间是凌晨04:40,看来原作者这段时间过得并不轻松。 随后(早晨08:47),唐巧对这条微博进行了转发,并对照逆向工程的结果,给出了自己的结论: 从“原作者”的公告来看,这段代码做了两件事: 1. 搜集设备信息,并发到指定的服务器 2. 广告功能(这是怎么实现的?) 膜拜大牛们第一时间做出的精准分析的同时,我们也可以尝试一下阅读 XcodeGhost 的源代码,看看原作者到底搜集了哪些设备信息、公告里说的广告功能是怎么回事。 设备信息 XcodeGhost 的代码实际上是两个 Category,UIDevice(AppleIncReservedDevice) 和 UIWindow

By Jon

iOS

Xcode 插件推荐

Xcode 是一个不完美的 IDE,需要安装插件来进行功能扩展,方便日常开发。 安装下面的插件前,需要首先安装 Xcode 的插件管理工具:Alcatraz。 VVDocumenter 规范注释生成器。输入三个斜线 ///,快速生成规范注释。配合 Doxygen,可以省去绝大部分文档撰写工作。 SCXcodeMiniMap 提供类似 SublimeText 中的代码“小地图”,方便快速定位到文件中的某一块代码。 update: SCXcodeMiniMap 会导致 Xcode 7 崩溃,截至 Xcode 7.2 版本仍未修复。使用需谨慎。 update 2: 目前已可以兼容 XCode 7.3。 KSImageNamed 扫描工程文件下的所有图片,为 imageNamed:@"" 提供自动补全。 XcodeColors 更改调试控制台配色

By Jon

iOS

去掉 UITableView 顶部的多余空间

将 UITableView 的 style 设为 grouped 后发现顶部出现了大约有35px的额外空白。 原因是 group 样式的 UITableView 顶部会生成自带初始高度的 tableHeaderView。解决方案将 tableHeaderView 替换成一个高度为0的 UIView。首先尝试将高度设为 CGRectZero: // 这种写法有问题 UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectZero]; self.tableView.tableHeaderView = tableViewHeaderView; 另外,如果 UITableView 充满了整个 ViewController 的垂直空间,还需要添加下面这行代码,禁止 ViewController 自动调整 ScrollView Insets: self.automaticallyAdjustsScrollViewInsets = NO; 使用上面这种写法,视图初始化之后看似正常,但由于实际上

By Jon