2026/4/18 9:05:23
网站建设
项目流程
祁阳网站设计,淘宝关键词搜索工具,临沂网站建设公司,网站建设shzanen. 暂时关闭Liquid Glass 液态玻璃在iOS26中#xff0c;系统默认开启了Liquid Glass 液态玻璃效果。例如UINavigationBar和UITabBar等#xff0c;并且是强制性的。但是在项目紧急上线#xff0c;适配没有做好的情况可以暂时关闭这个效果。当然苹果也给了最终限制#xff0c;…. 暂时关闭Liquid Glass 液态玻璃在iOS26中系统默认开启了Liquid Glass 液态玻璃效果。例如UINavigationBar和UITabBar等并且是强制性的。但是在项目紧急上线适配没有做好的情况可以暂时关闭这个效果。当然苹果也给了最终限制最多一年时间下个主要版本就没这个属性了。不推荐长期使用应尽快完成适配只要在info.plist加上这一项即可keyUIDesignRequiresCompatibility/keytrue/image2. 导航栏相关2.1 导航栏按钮玻璃背景问题在iOS 26中导航栏按钮会出现大的圆角矩形玻璃背景无法隐藏或关闭。这可能导致按钮文字被遮挡图标偏移显示异常之前设置的偏移量不再适用解决方案// 调整偏移量或更换居中的图标资源// 之前可能设置了负值偏移让按钮靠前现在需要重新调整// 方法1: 重新设计图标使用居中对齐的图标// 方法2: 调整customView的布局约束2.2 自定义View添加到NavigationBar的问题将自定义view添加到navigationBar后在iOS 26中会出现异常// 页面出现时添加[self.navigationController.navigationBar addSubview:_naviView];// 页面消失时移除[_naviView removeFromSuperview];现象 开始正常显示但从二级页面返回后view消失图层中存在但不可见原因这时候由于Apple 对 UINavigationBar 做了多次底层改造iOS版本 导航栏变化 影响iOS 15 引入 UINavigationBarAppearance 改变背景和阴影绘制机制iOS 17 导航栏层级变动_UINavigationBarModernContentView 延迟加载 手动添加的子视图可能被系统布局或动画移除iOS 26 NavigationBar使用新的 compositing layer 结构 非官方子视图在 appear/disappear 动画时被“吞掉”或遮盖导致了在iOS26中可能出现下面的问题会被系统的内部 layer 覆盖或者生命周期中 navigationBar 被重新创建导致 view 不再显示、被替换或无法响应。这时候有三种解决方案// 解决方法1一般不使用// 把view添加到titleView上// 优点跟随导航栏生命周期自动管理不会丢失或被覆盖。// 缺点只能放在标题区域布局受限。[self.navigationController.navigationItem.titleView addSubview:_naviView];// 解决方法2// 放到 NavigationBar 的 superview 层而非导航栏内部// 优点可以放在任何位置布局灵活。// 缺点需要手动管理生命周期容易出错。// ✅ 这样即使导航栏内部结构变动你的 view 也不会丢。// ⚠️ 记得在二级页面 viewWillAppear 时隐藏它。[self.navigationController.view addSubview:_naviView];// 临时解决方案// 延迟加载 view 到 navigationBar 上// 确保在 navigationBar 完成布局后再添加 或者在viewDidAppear 中添加dispatch_async(dispatch_get_main_queue(), ^{[self.navigationController.view addSubview:_naviView];});3. TabBar相关在最新版本中TabBar的变动很大3.1 私有属性设置TabBar问题❌ 不推荐的做法因为在iOS26中Apple 给 tabBar 属性加了 runtime 保护这时候或者运行闪退或者是新增一个单独的tab// 通过私有属性设置TabBar[self setValue:self.customTabbar forKey:tabBar];问题 在iOS 26中Apple给tabBar属性加了runtime保护会导致运行时闪退新增一个单独的tab自定义TabBar失效3.2 直接添加SubView的方式如果是通过直接添加到tabbar上,这种显示基本没大问题可能有中间大按钮的问题且有玻璃效果。 但是可能造成点击失效的问题被系统拦截。 我项目中是使用的系统TabBar没有自定义TabBar。 所以没有遇到这个问题。// 直接添加到tabbar上self.customTabbar.frame self.tabBar.bounds;[self.tabBar addSubview:self.customTabbar];问题显示基本正常有玻璃效果中间大按钮可能有问题点击可能失效被系统拦截3.3 自定义TabBar适配建议如果你是自定义仿咸鱼的那种发布tabbar可能出现只有四个tabarItem和中间一个发布图标的的情况。 这时候点击也会出问题。这种情况就需要重新设计UI了紧急修复或者等三方库更新或者再找找别的方法。3.4 TabBar透明度问题如果内容没有延伸到TabBar下方检查是否设置了isTranslucent属性// iOS 26需要移除或条件编译if #unavailable(iOS 26) {tabBar.isTranslucent false}我是没有遇到这个问题因为我们应用首页是个collectionview我还怕它延伸到tabbar下方造成不好点击的问题。4. 布局约束问题在修改中我发现之前获取的kTopHeight(NaviBarHeightStatusBarHeight) 会有问题。原因如下windowScene.statusBarManager.statusBarFrame 在某些时机是 0 或未更新特别是多 Scene、导航过渡、或 navigationBar 异步布局时。safeAreaInsets 由系统在 view 布局完成后才会精确计算早用会得到旧值或 0。UINavigationBar 在 iOS 26 里可能异步构建或使用新 compositing导致你在 viewDidLoad/viewWillAppear 读取到不正确的高度。如果你把子视图约束到 self.view.top 而不是 safeAreaLayoutGuide.top内容会延伸到状态栏/导航栏下方被遮盖。所以布局时使用 Safe AreasafeAreaLayoutGuide 或 view.safeAreaInsets而不是 statusBarFrame。//建议使用这个来获取高度make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(0);5. 图片导航栏按钮设置original仍显示蓝色即使设置了UIImageRenderingModeAlwaysOriginal在iOS 26中图片按钮仍显示为蓝色系统tintColor。// ❌ 在iOS 26中无效- (void)setNavigationBarBtn {UIImage *addImg [[UIImage imageNamed:规范_新增]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];UIBarButtonItem *add [[UIBarButtonItem alloc] initWithImage:addImgstyle:UIBarButtonItemStyleDonetarget:selfaction:selector(addClient)];self.navigationItem.rightBarButtonItems [add];}解决方案方案1设置tintColor为clearColor推荐- (void)setNavigationBarBtn {UIImage *addImg [[UIImage imageNamed:规范_新增]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];UIImage *searchImg [[UIImage imageNamed:放大镜]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];UIBarButtonItem *add [[UIBarButtonItem alloc] initWithImage:addImgstyle:UIBarButtonItemStylePlaintarget:selfaction:selector(addClient)];UIBarButtonItem *search [[UIBarButtonItem alloc] initWithImage:searchImgstyle:UIBarButtonItemStylePlaintarget:selfaction:selector(searchClient)];// ✅ iOS 26修复方案for (UIBarButtonItem *item in [add, search]) {item.tintColor UIColor.clearColor; // 确保使用原图色}// ⚠️ 注意iOS 26中左右顺序和之前版本相反if (available(iOS 26.0, *)) {self.navigationItem.rightBarButtonItems [search, add];} else {self.navigationItem.rightBarButtonItems [add, search];}}方案2使用自定义UIButton- (void)setNavigationBarBtn {UIButton *addButton [UIButton buttonWithType:UIButtonTypeCustom];[addButton setImage:[UIImage imageNamed:规范_新增] forState:UIControlStateNormal];addButton.frame CGRectMake(0, 0, 30, 30);[addButton addTarget:self action:selector(addClient) forControlEvents:UIControlEventTouchUpInside];UIBarButtonItem *add [[UIBarButtonItem alloc] initWithCustomView:addButton];self.navigationItem.rightBarButtonItems [add];}重要提醒⚠️ iOS 26中导航栏按钮顺序变化在设置rightBarButtonItems或leftBarButtonItems时iOS 26的显示顺序与之前版本相反需要条件编译处理if (available(iOS 26.0, *)) {// iOS 26: 数组第一个元素显示在最右边self.navigationItem.rightBarButtonItems [最右边的按钮, 中间按钮, 最左边的按钮];} else {// iOS 25及以下: 数组第一个元素显示在最左边self.navigationItem.rightBarButtonItems [最左边的按钮, 中间按钮, 最右边的按钮];