【问题标题】:Mac Catalyst popover set/limit size problemMac Catalyst popover 设置/限制大小问题
【发布时间】:2020-12-01 09:00:46
【问题描述】:

是否可以在 Mac Catalyst 上限制/修复(最小/最大)弹出框大小?请参阅随附的视频。

Example video

【问题讨论】:

    标签: ios xcode mac-catalyst


    【解决方案1】:

    是的,但这有点小技巧。 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)
            }
        }
    }
    

    如果您根本不希望显示的视图可调整大小,只需将 minimumSizemaximumSize 设置为相同的值。

    我不喜欢这样使用viewWillLayoutSubviews,但是windowSceneviewDidLoadviewWillAppear 中仍然为零,虽然它在viewDidAppear 中不是零,但设置sizeRestrictions 会导致在屏幕上可见的调整大小。

    好消息是这个问题可能会在 Big Sur 11.1 中得到修复。根据beta release notes,macOS 11.1 将尊重preferredContentSize 并且默认情况下它们不会调整大小:

    当您使用页面表单或表单表单呈现样式呈现视图控制器时,默认情况下,视图控制器的根视图的大小由呈现的视图控制器的 preferredContentSize 方法返回的值确定,而视图不是可调整大小。您可以通过使用 Auto Layout 指定其根视图的最大和最小尺寸来安排呈现的视图控制器的大小。要启用此功能,请将应用程序主窗口的 canResizeToFitContent 属性设置为 YES。一种方法是覆盖主视图控制器中视图的 willMove(toWindow:) 或 didMoveToWindow() 方法。 (65254666)

    【讨论】:

    • 谢谢伙计,我今天会在 BigSur 11.1 和 Xcode 12.3 上试用它。
    • 确实 BigSur 11.1 和 Xcode 12.3 修复了所有问题。谢谢! :)
    • 'preferredContentSize' 设置弹出窗口大小,它工作正常!
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2020-09-16
    • 2020-12-22
    相关资源
    最近更新 更多