尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

macOS27 上可变界面尺寸 iOS App 揭秘

发布时间:2026/9/27 21:15:25

资讯中心
01
ARTICLE

macOS27 上可变界面尺寸 iOS App 揭秘

macOS27 上可变界面尺寸 iOS App 揭秘
把一个 iOS App 放到 Mac 上运行拖动窗口边缘变的只有宽高吗在 macOS 27 上做了一次小实验答案颇有意味随着用户调整窗口大小SwiftUI 环境中的 Size Class 也会发生变化。原本常在横竖屏适配中见到的compact和regular如今在鼠标拖动之间有了更直观的表现。这件事值得留意。对于沿用固定设备假设的界面一次再普通不过的窗口缩放就可能让布局捉襟见肘。说起 Size Class许多开发者会条件反射地想到“iPhone 用 compactiPad 用 regular”。这套经验便于入门却容易先入为主。SwiftUI 通过两个环境值描述水平和垂直方向的空间分类Environment(\.horizontalSizeClass)privatevarhorizontalSizeClassEnvironment(\.verticalSizeClass)privatevarverticalSizeClass两者的取值可以是.compact、.regular也可能为nil。水平对应宽度垂直对应高度。它们描述的是视图所处的布局环境不能简单当成设备型号的别名。相关定义可见 Apple 的 UserInterfaceSizeClass 文档。因此看见一个宽窗口便断言两个方向都是regular难免以偏概全。窗口的宽与高是两回事两个方向的分类也应分别观察。这次实验的做法很直接让界面同时显示实际可用尺寸与两个 Size Class然后拖动窗口观察数值。核心代码并不复杂structSizeClassProbe:View{Environment(\.horizontalSizeClass)privatevarhorizontalEnvironment(\.verticalSizeClass)privatevarverticalvarbody:someView{GeometryReader{proxyinVStack(alignment:.leading,spacing:12){Text(宽\(proxy.size.width,specifier:%.1f)pt)Text(高\(proxy.size.height,specifier:%.1f)pt)Text(水平\(name(horizontal)))Text(垂直\(name(vertical)))}.padding()}}privatefuncname(_value:UserInterfaceSizeClass?)-String{switchvalue{case.compact:compactcase.regular:regularcasenil:nilunknowndefault:unknown}}}这里有个细节不能张冠李戴GeometryReader测量的是当前视图获得的布局空间单位为点它既不是显示器分辨率也不是包含标题栏的窗口外框尺寸。将它与 Size Class 并排展示恰好可以对照“具体尺寸”和“空间分类”这两个层次。测试入口同样要选对。在 Xcode 中应选择My Mac (Designed for iPad)运行 iOS App 的 Mac 版本。多平台项目里的普通My Mac则可能启动原生 macOS App。两者虽然都出现在 Mac 桌面上观察结果却不能混为一谈。在本次 macOS 27 实测中拖动 iOS App 窗口确实能够观察到 Size Class 随之变化。这个结果说明至少在当前测试环境下分类会随着窗口调整而更新不能将启动时读到的值视作一成不变。不过窗口尺寸连续变化Size Class 只有少量离散状态。拖动了一段距离数值变了分类保持原样完全可能。此次观察也不足以归纳出适用于所有设备、系统版本和运行方式的固定阈值。把某次测得的宽度刻进代码反倒容易刻舟求剑。对 SwiftUI 开发者而言接下来便顺理成章让布局持续读取环境在分类变化时重新组织内容。例如在水平空间宽裕时并排展示两块内容在紧凑时改为上下排列structAdaptiveContent:View{Environment(\.horizontalSizeClass)privatevarhorizontalprivatevarlayout:AnyLayout{horizontal.regular?AnyLayout(HStackLayout(alignment:.top,spacing:20)):AnyLayout(VStackLayout(alignment:.leading,spacing:20))}varbody:someView{layout{GroupBox(概览){Text(主要信息)}GroupBox(详情){Text(补充内容)}}.padding()}}代码不必监听鼠标拖动也不必把 Size Class 复制到一份额外的状态中。环境值更新后SwiftUI 会重新求值布局自然跟着调整。这里将nil一并落入纵向布局是示例明确选择的回退策略。当然Size Class 也不能包办所有适配。两块内容是否真的放得下还受文字长度、字体大小和容器空间影响。决定界面的整体组织方式可以参考 Size Class判断一组按钮能否并排容纳则更适合交给ViewThatFits或具体的布局计算。各司其职才能游刃有余。macOS 27 上的这次实验把一个老道理摆到了眼前用户手中的窗口随时都可能改变界面的空间条件。我们写下的是布局规则用户决定的是窗口大小。让界面懂得因地制宜拖动窗口时的从容便会水到渠成。感谢宝子们的观赏我们下次再会吧
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。