概览
在苹果大屏设备上,我们往往需要借助多窗口(Multiwindow)来充分利用海量的显示空间,比如 Mac,iPad 以及 AppleTV 系统 等等。
所幸的是,SwiftUI 对多窗口管理提供了很好的支持。利用 SwiftUI 我们可以非常轻松的设置窗口在屏幕上的位置,大小以及拖动反馈。
在本篇博文中,您将学到如下内容:
- 概览
- 1. 限制窗口大小
- 2. 任性选择窗口放置位置
- 3. 检测窗口拖动状态
- 总结
SwiftUI 窗口经过几多进化已经愈发趋于成熟,小伙伴们值得信赖。那还等什么呢?让我们立即开始窗口大冒险吧!
Let‘s go!!!😉
1. 限制窗口大小
从 SwiftUI 5.0(iOS 17,macOS 13)开始,苹果新增了 defaultSize 视图修改器专门用来设置窗口的尺寸:
利用 defaultSize 修改器,我们可以任性设置 Window 的长与宽。如下代码所示,我们将 search 窗口的大小设置成了 500 points x 500 points:
struct SugarBotApp: App {
var body: some Scene {
WindowGroup {
RootView()
}
WindowGroup(id: "search") {
SearchFeatureView()
}
.defaultSize(width: 500, height: 500)
}
}
除了设置窗口大小的初始值以外,我们还可以使用 SwiftUI 中的 windowResizability 修改器来决定后续用户能够如何更改窗口尺寸:
在下面的代码中,我们调用 windowResizability 修改器并传入 .contentSize 实参将 SearchFeatureView 的最大尺寸设置为其内容本身的大小,这意味着用户无法将 SearchFeatureView 窗口的尺寸需改为超越其视图内容“默认”的大小:
import SwiftUI
@main
struct MacTextApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.defaultSize(.init(width: 300, height: 300))
WindowGroup(id: "search") {
SearchFeatureView()</