旋转时自动更新preferredContentSize

Posted

技术标签:

【中文标题】旋转时自动更新preferredContentSize【英文标题】:Automatically update preferredContentSize upon rotation 【发布时间】:2014-10-04 05:35:00 【问题描述】:

我正在寻找一种方法来强制 UIPopoverPresentationController 自动调整大小以填充大部分屏幕,减去 50 个填充单位。

我首先尝试在viewDidLoad 中设置preferredContentSize,然后检测何时发生旋转并将CGSize 更新为我可以计算的新大小。但由于某种原因,这在我的上下文中不起作用。我使用的是UIDeviceOrientationDidChangeNotification,它通常会调用该方法,但当弹出框存在于照片编辑扩展程序中时,它不会被调用。

我想知道除了在检测到大小更改后手动更新preferredContentSize 之外,是否还有其他方法可以更改弹出框大小?如果没有,有没有办法在这种情况下从这个弹出框内检测旋转?

【问题讨论】:

【参考方案1】:

试试这个:

func isLandscape() -> Bool 
// your logical here


override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) 
        let myNewSize = isLandscape() ? mySizeLandscape : mySizePortrait
        self.preferredContentSize = myNewSize
        super.viewWillTransition(to: myNewSize, with: coordinator)

【讨论】:

以上是关于旋转时自动更新preferredContentSize的主要内容,如果未能解决你的问题,请参考以下文章

基于旋转更新约束(X,Y,W,H)时出错?

带视图更新的iPhone视图自动旋转-标题和实现

在 SwiftUI 中更改方向时更新 UI

集合视图不会在旋转时更新布局

当我旋转屏幕时,progressDialog 停止更新

旋转设备后 safeAreaLayoutGuide 未更新