我看到UIHostingController正在托管一个SwiftUI视图,它是以情态方式呈现的.我看到的问题是,如果modalPresentationStyle设置为overCurrentContext,它不会在自动旋转时调整大小.

  let promptHostingController = UIHostingController(rootView: promptView)
  promptHostingController.isModalInPresentation = true
  promptHostingController.overrideUserInterfaceStyle = .dark
  promptHostingController.modalPresentationStyle = .overCurrentContext
  self.present(promptHostingController, animated: animated)

将其设置为任何其他值(如overFullScreen)可以解决问题.Buy想知道为什么它无法调整overCurrentContext的规模?

推荐答案

overCurrentContext人的文档中,没有任何内容说明所呈现的视图将调整大小以适应整个屏幕.它根本没有提到任何关于显示的视图大小的内容:

一种显示样式,其中内容显示在另一个视图控制器的内容之上.

文件还说:

因此,如果呈现的视图控制器没有用不透明的内容填充屏幕,底层内容就会显示出来.

这里就是这种情况--您没有编写在屏幕旋转时调整视图大小的代码,所以在设备旋转后,视图"不会填满屏幕"(更不用说"不透明内容"了).

然而,overFullScreen的文档确实说它将"覆盖"整个屏幕.

一种视图演示样式,其中显示的视图覆盖屏幕.

注意这里不同的用词--"封面",而不是"结束".


无论如何,如果您希望它覆盖definesPresentationContext的视图控制器,您可以自己向视图添加自动布局约束.

// here I'm assuming "view" is the view you want to cover
let host = UIHostingController(rootView: ...)
host.modalPresentationStyle = .overCurrentContext
host.sizingOptions = [.intrinsicContentSize]
host.presentationController?.delegate = self
host.view.translatesAutoresizingMaskIntoConstraints = false
present(host, animated: true) { [self] in
    NSLayoutConstraint.activate([
        host.view.leftAnchor.constraint(equalTo: view.leftAnchor),
        host.view.rightAnchor.constraint(equalTo: view.rightAnchor),
        host.view.topAnchor.constraint(equalTo: view.topAnchor),
        host.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    ])
}

您应该在呈现宿主控制器之后添加约束,这就是为什么我将NSLayoutConstraint.activate放在present的完成处理程序中.在此之前,所呈现的视图还没有在视图层次 struct 中.

此外,使用intrinsicContentSize作为大小调整选项.正如它的文档所说,当您使用AutoLayout来布局宿主视图时,应该使用它.

Ios相关问答推荐

有没有办法观察滚动的SwiftUI图表的内容偏移量?

将数据传回VC时委托为空

OnTapGesture在其修改的视图外部触发

SwiftUI 点击列表内不会触发 Select

RFID scanner 的蓝牙服务 UUID?

如何结合`@dynamicMemberLookup`和`ExpressibleByStringInterpolation`来实现方法链?

_SKStoreProductParameterAdNetworkSourceIdentifier未定义符号

Apple Metal iOS 为什么 GLKMatrix4MakeLookAt 来回摇摆

为什么这个 SwiftUI 状态在作为非绑定参数传递时没有更新?

将 URLCache 子类与 URLSession 一起使用

SwiftUI 图表 BarMark 将注释对齐到图表顶部

我需要二进制文件来进行 App Store 应用程序传输吗?

Xcode14 启动时崩溃:dyld:库未加载:/usr/lib/swift/libswiftCoreGraphics.dylib

在视图控制器中实例化视图控制器是否可能/智能?

如何阻止图像在 UIImageView 中拉伸?

Swift枚举继承

UITableView 背景 colored颜色 在 iPad 上总是白色

swift 语言中的 null / nil

使用 swift 从应用程序委托打开视图控制器

dismissModalViewController 并传回数据