iOS开发针对苹果新系统iOS26的兼容适配UITabBarButtonItem & UITabBar的液态玻璃效果/当前wifi ssid获取

1. UITabBarButtonItem液态玻璃效果

        兼容处理:

        第一种方式(不推荐):把所有的UITabBarButtonItem关闭液态玻璃效果:

 if (@available(iOS 26.0, *)) { self.navigationItem.rightBarButtonItem.hidesSharedBackground = YES; self.navigationItem.leftBarButtonItem.hidesSharedBackground = YES; } else { // Fallback on earlier versions }

        第二种方式:所有导航栏按钮全部采用UITabBarButtonItem,支持液态玻璃效果。

        第三种方式:降低Xcode版本到Xcode25及以下版本,然后再打包

        第四种方式:使用兼容模式显示传统UI风格,也就是取消TabBar液态玻璃效果:

        打开info.plist,添加一个Boolean键值对,取消液态玻璃效果,添加完成后重新运行,UITabBar恢复旧的样式:

<key>UIDesignRequiresCompatibility</key> <true/>

2.  采用UILayoutFittingExpandedSize设置自定义的navigationItem.titleView的内容尺寸,在iOS26上高度偏大,高度变为屏幕的高度,预期是高度应该为导航栏的高度;

原因:在iOS26之前UILayoutFittingExpandedSize最大尺寸限制在导航栏范围内,而在iOS26则允许充斥整个屏幕:

- (CGSize)intrinsicContentSize { return UILayoutFittingExpandedSize; }

        兼容处理:

        修改intrinsicContentSize,指定titleView的尺寸大小为导航栏大小:

 #define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width) - (CGSize)intrinsicContentSize { return CGSizeMake(SCREEN_WIDTH, 44); }

3、UITabBarController调用self.setValue(yourTabBar, forKey: "tabBar")自定义tabBar失效

        原因:iOS 26 之后对 UITabBarController 的 KVC 注入限制,导致无效,但不会crash

        兼容处理:

        方案1:使用兼容模式显示传统UI风格,也就是取消TabBar液态玻璃效果:

        打开info.plist,添加一个Boolean键值对,取消液态玻璃效果,添加完成后重新运行,UITabBar恢复旧的样式:

<key>UIDesignRequiresCompatibility</key> <true/>

        方案2:改为使用系统的UITabBarItem组件,能够支持新系统的液态玻璃效果

        方案3:降低Xcode版本到Xcode25及以下版本,然后再打包

4、创建一个由URL标识的代表任何资源的assert对象时报错:

AVAssetExportSessionStatusFailed: Error Domain=AVFoundationErrorDomain Code=-11800 "这项操作无法完成" UserInfo={ NSUnderlyingError=0x1586626a0 { Error Domain=NSOSStatusErrorDomain Code=-16979 "(null)" }, NSLocalizedFailureReason=发生未知错误(-16979), NSURL=file:///var/mobile/Media/DCIM/100APPLE/IMG_0426.MOV, NSLocalizedDescription=这项操作无法完成 }

        原因:AVAssetExportSession -11800 / -16979 转码失败,权限不足、文件不可读,创建一个由URL标识的代表任何资源的assert对象时,传入的originFilePath示例: file:///var/mobile/Media/DCIM/100APPLE/IMG_0426.MOV,没有读的权限,因为iOS 26对相册视频读取权限收紧,代码示例:

//originFilePath示例: file:///var/mobile/Media/DCIM/100APPLE/IMG_0426.MOV AVURLAsset *asset = [AVURLAsset URLAssetWithURL:originFilePath options:nil]; 

        兼容处理:先将相册的视频拷贝到 App 沙盒临时目录,然后再去创建资源对象AVURLAsset

 [self copyVideoToSandbox:originFilePath completion:^(NSURL *localUrl) { AVURLAsset *asset = [AVURLAsset URLAssetWithURL:localUrl options:nil]; }]; - (void)copyVideoToSandbox:(NSURL *)originUrl completion:(void (^)(NSURL *localUrl))completion { NSString *temp = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tempVideo.mov"]; NSURL *localUrl = [NSURL fileURLWithPath:temp]; NSFileManager *fm = [NSFileManager defaultManager]; if ([fm fileExistsAtPath:temp]) { [fm removeItemAtPath:temp error:nil]; } NSError *err = nil; BOOL ok = [fm copyItemAtURL:originUrl toURL:localUrl error:&err]; if (!ok || err) { NSLog(@"拷贝失败: %@", err); completion(nil); return; } completion(localUrl); } 

5. 通过CNCopySupportedInterfaces获取wifi ssid的方式已失效:

 class func getWifiSSID() -> String? { var wifiName: let wifiInterfaces = CNCopySupportedInterfaces() if wifiInterfaces != nil { let interfaceArr = CFBridgingRetain(wifiInterfaces) as! [String] if interfaceArr.count > 0 { let interfaceName = interfaceArr[0] as CFString let ussafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName) if ussafeInterfaceData != nil { let interfaceData = ussafeInterfaceData as! [String: Any] wifiName = interfaceData["SSID"] as? String ?? "" } else { return nil } } } return wifiName }

        原因:iOS26不再推荐使用CNCopySupportedInterfaces,在iOS26将返回空值

        兼容处理:Capabilities添加Access WiFi Information权限;通过CLLocationManager确保有定位权限,然后使用NEHotspotNetwork获取wifi ssid:

NEHotspotNetwork.fetchCurrent { curNetwork in block(curNetwork?.ssid ?? "") }

Read more

今日AI新鲜资讯(2026年3月11日)

今天是2026年3月11日,周三。AI领域热点持续发酵——“养龙虾”热潮催生“上门卸载”新生意,周鸿祎宣布推出360安全龙虾,英伟达版“龙虾”NemoClaw即将登场。以下是今日值得关注的重要资讯。 一、今日焦点:“养龙虾”热潮降温,安全与卸载成新关键词 第一批“养龙虾”的人开始花钱请人“上门卸载”。随着OpenClaw持续火爆,早期尝鲜者开始发现“养龙虾”并非想象中那么简单。据金十数据报道,第一批“养龙虾”的人,开始花钱请人“上门卸载”。这标志着“养龙虾”热潮从盲目跟风进入理性回调阶段。 国家互联网应急中心发布OpenClaw安全应用风险提示。前期由于OpenClaw智能体的不当安装和使用,已经出现了一些严重的安全风险。应急中心建议采取以下安全措施: * 强化网络控制,不将OpenClaw默认管理端口直接暴露在公网 * 对运行环境进行严格隔离,限制OpenClaw权限过高问题 * 加强凭证管理,避免在环境变量中明文存储密钥 * 建立完整的操作日志审计机制 * 严格管理插件来源,禁用自动更新功能 多地地方政府推出“养龙虾”便民措施。

全网首发!OpenClaw 云端部署喂饭级教程,零成本 30 分钟打造 7x24h AI 员工

全网首发!OpenClaw 云端部署喂饭级教程,零成本 30 分钟打造 7x24h AI 员工

↑阅读之前记得关注+星标⭐️,😄,每天才能第一时间接收到更新 Hello 大家好,我是鹿先森,祝大家新年快乐! 前两天聊 Kimi Claw 的文章突然爆火,没想到大家对 OpenClaw 的热情这么高!就连除夕夜 12 点,都有小伙伴在疯狂进群领取《OpenClaw 本地部署保姆级教程》,看群里的热烈反馈,大家都已经成功上手玩起来了! (没领到的朋友可以挪步之前的文章获取暗号) 但在和大家的交流中,我发现了一个普遍的痛点,本地部署响应太慢了,并且对配置有要求,有的朋友电脑是老款 Win7 插件都安装不上,有的朋友觉得电脑必须 24 小时开机才能用,太费电也不方便。 为了解决这个问题,我连夜爆肝出了这篇《OpenClaw 零成本云端部署喂饭级教程》,阅读大概需要10分钟,建议收藏慢慢看。 不需要你的电脑 24 小时开机,不需要高性能显卡,只需要一次性操作,把 OpenClaw 搬到云端,不仅稳定,而且完全免费!

【前沿解析】2026年3月29日:AI推理效率双重突破——谷歌TurboQuant内存压缩与RWKV-6开源重构大模型部署范式

当百万级上下文成为AI应用标配,当边缘设备渴求智能部署,内存墙与算力瓶颈正成为制约AI规模化落地的最后枷锁。2026年3月29日,两大技术突破同步到来:谷歌研究院发布TurboQuant算法,将KV缓存内存占用压缩6倍、速度提升8倍;RWKV开源基金会宣布RWKV-6 1.6B模型正式开源,线性复杂度架构打破Transformer二次方魔咒。这不仅是技术的双重突破,更是AI从实验室走向产业、从云端下沉到终端的范式革命。 引言:效率革命的双引擎——内存压缩与架构创新 2026年3月,AI行业迎来了标志性的效率拐点。在算力增长曲线趋缓、摩尔定律失效的背景下,通过算法优化提升现有硬件效能成为唯一可行路径。谷歌TurboQuant与RWKV-6开源,恰如效率革命的双引擎,从两个维度同时突破传统瓶颈: * TurboQuant:针对大模型推理最核心的内存瓶颈——KV缓存,通过PolarQuant坐标变换与QJL误差校正,实现3-bit量化下的零精度损失,实测内存占用降低83%、注意力计算速度提升8倍 * RWKV-6:基于线性复杂度的时间序列混合架构,在保持强大序列建模能

AI的提示词专栏:错误定位 Prompt,快速定位异常堆栈

AI的提示词专栏:错误定位 Prompt,快速定位异常堆栈

AI的提示词专栏:错误定位 Prompt,快速定位异常堆栈 本文聚焦错误定位 Prompt 的设计与应用,先阐释异常堆栈的核心构成及开发者定位错误时的信息过载、经验依赖等痛点,明确错误定位 Prompt 需实现信息提取、根因推测、行动指南三大目标。接着分别给出适用于新手的基础模板与面向资深开发者的进阶模板,结合 Python 索引越界、微服务订单创建错误等案例展示模板实战效果。还介绍了针对 Java、Python、JavaScript 等多语言及数据库、分布式链路等特殊场景的 Prompt 适配技巧,提出通过约束输出细节、添加负面清单、示例引导优化模型输出的方法,最后以章节总结和含思路点拨的课后练习巩固知识,助力开发者借助 Prompt 高效定位不同场景下的程序错误。 人工智能专栏介绍     人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的 AI 知识库,把提示词设计、AI 创作、智能绘图等多个细分领域的知识整合起来。无论你是刚接触 AI 的新手,还是有一定基础想提升的人,都能在这里找到合适的内容。