【发布时间】:2020-12-01 09:00:46
【问题描述】:
是否可以在 Mac Catalyst 上限制/修复(最小/最大)弹出框大小?请参阅随附的视频。
【问题讨论】:
标签: ios xcode mac-catalyst
是否可以在 Mac Catalyst 上限制/修复(最小/最大)弹出框大小?请参阅随附的视频。
【问题讨论】:
标签: ios xcode mac-catalyst
是的,但这有点小技巧。 Big Sur 将这些呈现的视图控制器加载为它们自己的窗口,因此我们可以获取窗口的windowScene 并设置它的sizeRestrictions。执行此操作的最佳 (?) 位置是 呈现 视图控制器的 viewWillLayoutSubviews 方法:
class MyPresentedViewController: UIViewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if #available(macCatalyst 14, *) {
view.window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 500, height: 500)
view.window?.windowScene?.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 800)
}
}
}
如果您根本不希望显示的视图可调整大小,只需将 minimumSize 和 maximumSize 设置为相同的值。
我不喜欢这样使用viewWillLayoutSubviews,但是windowScene 在viewDidLoad 和viewWillAppear 中仍然为零,虽然它在viewDidAppear 中不是零,但设置sizeRestrictions 会导致在屏幕上可见的调整大小。
好消息是这个问题可能会在 Big Sur 11.1 中得到修复。根据beta release notes,macOS 11.1 将尊重preferredContentSize 并且默认情况下它们不会调整大小:
当您使用页面表单或表单表单呈现样式呈现视图控制器时,默认情况下,视图控制器的根视图的大小由呈现的视图控制器的 preferredContentSize 方法返回的值确定,而视图不是可调整大小。您可以通过使用 Auto Layout 指定其根视图的最大和最小尺寸来安排呈现的视图控制器的大小。要启用此功能,请将应用程序主窗口的 canResizeToFitContent 属性设置为 YES。一种方法是覆盖主视图控制器中视图的 willMove(toWindow:) 或 didMoveToWindow() 方法。 (65254666)
【讨论】: