当前位置: 首页 > news >正文

【OC】UIKit常用组件适配iOS 26

文章目录

  • UITabBarController
    • 使用26的风格显示TabBar
    • 在滑动时最小化TabBar
    • 附加视图
  • 控制组件
    • UIButton
    • UISlider
  • 其他方面

在开始之前,得先说说对于iOS 26的设计理念

iOS 26最重要的就是引入了液态玻璃效果,液态玻璃结合了玻璃的光学特性和流动性。这种材料为控制和导航元素形成了一个独特的功能层。它会影响界面的外观、感觉和移动方式,根据各种因素进行调整,以帮助将焦点放在基础内容上

所以在使用液态玻璃效果的时候,一定要注意不要让液态玻璃效果影响到用户的可读性,我们只需要将液态玻璃效果控制在重要的部分即可

同时,为了适配液态玻璃效果,我们应该尽可能的减少自定义背景,并让系统决定背景外观

接下来我将讲解一下目前苹果对UIKit上适配的一些常见的液态玻璃效果供参考

UITabBarController

使用26的风格显示TabBar

我们先从TabBar开始

TabBar是一个并列结构的容器视图控制器,他的功能是给用户提供几个并列的选择

在iOS 26中,如果你使用系统图标,且不增加自定义背景,ios 26会自动将控制器设置为液态玻璃效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

如果使用自定义背景来实现tabBar,就会出现这种情况

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NSArray* tabBar = [NSArray arrayWithObjects:recommendNav,swimmingNav,musicPlayerNav,keyNoteNav,personalFileNav, nil];// 去除startTabBar的边界线startTabBar.tabBar.layer.borderWidth = 0;startTabBar.viewControllers = tabBar;startTabBar.tabBar.backgroundColor = [UIColor clearColor];startTabBar.tabBar.barTintColor = [UIColor systemBackgroundColor];startTabBar.tabBar.tintColor = [UIColor labelColor];startTabBar.tabBar.translucent = YES;

明显,在设置背景后,tabBar并没有像Apple设计的那样浮在内容显示区上,而是遮盖了部分内容

我们将背景颜色去除(即使是clear Color也会影响TabBar的显示!)

在这里插入图片描述

即可正常显示TabBar

在滑动时最小化TabBar

除了悬浮显示TabBar,26还可以在滑动的时候隐藏TabBar来凸显内容

    startTabBar.tabBarMinimizeBehavior = UITabBarMinimizeBehaviorOnScrollDown;

tabBarMinimizeBehavior是一个控制tabBar什么时候隐藏的属性

@property (nonatomic, assign) UITabBarMinimizeBehavior tabBarMinimizeBehavior API_AVAILABLE(ios(26.0), tvos(26.0), visionos(26.0)) API_UNAVAILABLE(watchos);

他是一个枚举值,在未设置情况下为UITabBarMinimizeBehaviorAutomatic

在这里插入图片描述

UITabBarMinimizeBehaviorAutomatic

解析为系统默认最小化行为

UITabBarMinimizeBehaviorNever

标签栏不最小化

UITabBarMinimizeBehaviorOnScrollDown

向下滚动时,标签栏会最小化,向上滚动时会展开

UITabBarMinimizeBehaviorOnScrollUp

向上滚动时,标签栏会最小化,向下滚动时会展开。如果滚动视图内容与底部对齐,则推荐使用

效果:

附加视图

iOS 26可以在TabBar上显示一个小的附加视图,例如播放器控制器

在这里插入图片描述

要设置这个效果,我们需要设置TabBar的属性bottomAccessory

@property (nonatomic, strong, nullable) UITabAccessory *bottomAccessory API_AVAILABLE(ios(26.0)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos);

这个属性接受一个之前没有的类,UITabAccessory

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建这个类目前的方法就是- initWithContentView:

这个方法接收一个UIView 类型,所以实际上我们创建一个UIView类型的子类即可

- (instancetype)initWithFrame:(CGRect)frame {return [self initWithIsPlaying:NO];
}- (instancetype)initWithIsPlaying:(BOOL)playing {self = [super initWithFrame:CGRectZero];if (self) {_isPlaying = playing;[self setupSubviews];[self configureSubviews];[self setupLayoutConstraints];}return self;
}

这是大体初始化的一个思路,在这里不展示过多的具体代码了

向下滑动,补充视图会自动填充到合适的位置

在这里插入图片描述

在收回补充视图的时候,可以注意到补充视图空间有变化

补充视图的变化可以读取TabBar的traitCollection中的tabAccessoryEnvironment 属性

tabAccessoryEnvironment 属性同样也是一个枚举值

在这里插入图片描述

可以通过检测属性来更新UI,这里就不做演示了

控制组件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

控件经过重新设计,在外表上焕然一新,但是整体与之前保持一致

UISwitch的大小有所不同,所以检查一下switch控件是否适应整体大小布局

UIButton

UIButton的样式适配大部分从**UIButtonConfiguration**适配

UIButtonConfiguration 新增四个类方法

+ (instancetype) glassButtonConfiguration;
+ (instancetype) prominentGlassButtonConfiguration;
+ (instancetype) clearGlassButtonConfiguration;
+ (instancetype) prominentClearGlassButtonConfiguration;

分别对应4种不同的按钮样式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

UISlider

UISlider的更新除了官方自动的拇指滑块的动态效果,现在还支持刻度调节

使用**trackConfiguration** 属性来设置刻度

UISliderTrackConfiguration 有两个类方法,可以让你根据简单的数字或者数组来设置刻度

同时,UISlider还支持取消滑块功能,设置sliderStyleUISliderStyleThumbless 即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其他方面

由于iPad OS 26更加注重多屏幕浏览,所以在UIKit里,我们常用的mainScreen被废弃了(默哀1分钟)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在多窗口的情况下,mainScreen 这个概念已经不能准确地代表您的代码运行所在的那个屏幕了

当前最推荐的解决方案是通过当前的“场景”(Scene)上下文来获取屏幕信息

UIWindowScene *windowScene = (UIWindowScene *)scene;
self.window.frame = windowScene.screen.bounds;

这里的Scene为方法传入参数

实际上对iOS来说,分屏浏览可能还需要很久才会更新,但是这个属性被废弃确实会影响到项目的开发,所以在这里稍微提一下

http://www.dtcms.com/a/532608.html

相关文章:

  • 自适应微网站开发舟山网站设计
  • 南京高端网站开发朝城做网站公司
  • 26.UE-游戏逆向-绘制骨骼编号
  • 可做产品预售的网站九江有限公司
  • 设计模式-状态模式(State)
  • 强化学习推荐系统:不同的探索策略——贪心探索策略(4.1)
  • Git学习-1
  • 如何运营一个行业网站dede建设网站
  • 找公司网站建设3网站有哪些后台
  • 15.如何利用ArcGIS提取出线要素数据所经过的格网
  • 数据结构<C++>——数组
  • vidhub v1.3.13 |聚合主流网盘,自动刮削整理影视资源,有网盘会员的可入,或者使用不限速网盘
  • 专业网站制作地址杭州网站怎么制作
  • 免费素材网站排行榜征求网站建设
  • 汉口网站制作公司营销网站模板下载
  • 将有序数组转换为二叉搜索树解题思路
  • c语言实现栈【由浅入深-数据结构】
  • 教做家常菜的视频网站wordpress 搭建个人博客
  • 【Go】C++ 转 Go 第(五)天:Goroutine 与 Channel | Go 并发编程基础
  • 算法:283. 移动零
  • 设计微信公众号的网站吗举例说明seo
  • 欧米伽男士手表官方网站wordpress下载类型主题
  • Chrome离线版下载版,Chrome离线版安装文件,Chrome离线包
  • 上饶网站建设多少钱分销网站有哪些
  • 阿里云 Qwen 模型的 OpenAI SDK 调用
  • 什么是提示词(Prompt),提示词类型、结构解析
  • MES系列-制造流程数字化的实现
  • 我想在网站上卖食品怎么做百度知道网址
  • 对于使用队列实现栈以及用栈实现队列的题目的解析
  • Spring Boot3零基础教程,事件驱动开发,设计登录成功后增加积分记录信息功能,笔记61