iPad 上具有自定义尺寸的 SwiftUI Sheet() 模式

2023-11-22

如何使用 SwiftUI 控制 iPad 上模态表的首选演示大小?我很惊讶在谷歌上找到这个问题的答案是多么困难。

另外,了解模式是否通过向下拖动(取消)或实际执行自定义积极操作来关闭的最佳方法是什么?


以下是我在 iPad 上使用 SwiftUI 显示表单的解决方案:

struct MyView: View {
    @State var show = false

    var body: some View {
        Button("Open Sheet") { self.show = true }
            .formSheet(isPresented: $show) {
                Text("Form Sheet Content")
            }
    }
}

通过此 UIViewControllerRepresentable 启用

class FormSheetWrapper<Content: View>: UIViewController, UIPopoverPresentationControllerDelegate {

    var content: () -> Content
    var onDismiss: (() -> Void)?

    private var hostVC: UIHostingController<Content>?

    required init?(coder: NSCoder) { fatalError("") }

    init(content: @escaping () -> Content) {
        self.content = content
        super.init(nibName: nil, bundle: nil)
    }

    func show() {
        guard hostVC == nil else { return }
        let vc = UIHostingController(rootView: content())

        vc.view.sizeToFit()
        vc.preferredContentSize = vc.view.bounds.size

        vc.modalPresentationStyle = .formSheet
        vc.presentationController?.delegate = self
        hostVC = vc
        self.present(vc, animated: true, completion: nil)
    }

    func hide() {
        guard let vc = self.hostVC, !vc.isBeingDismissed else { return }
        dismiss(animated: true, completion: nil)
        hostVC = nil
    }

    func presentationControllerWillDismiss(_ presentationController: UIPresentationController) {
        hostVC = nil
        self.onDismiss?()
    }
}

struct FormSheet<Content: View> : UIViewControllerRepresentable {

    @Binding var show: Bool

    let content: () -> Content

    func makeUIViewController(context: UIViewControllerRepresentableContext<FormSheet<Content>>) -> FormSheetWrapper<Content> {

        let vc = FormSheetWrapper(content: content)
        vc.onDismiss = { self.show = false }
        return vc
    }

    func updateUIViewController(_ uiViewController: FormSheetWrapper<Content>,
                                context: UIViewControllerRepresentableContext<FormSheet<Content>>) {
        if show {
            uiViewController.show()
        }
        else {
            uiViewController.hide()
        }
    }
}

extension View {
    public func formSheet<Content: View>(isPresented: Binding<Bool>,
                                          @ViewBuilder content: @escaping () -> Content) -> some View {
        self.background(FormSheet(show: isPresented,
                                  content: content))
    }
}

您应该能够修改其中的代码func show()根据 UIKit 规范,以便按照您喜欢的方式调整大小(如果需要,您甚至可以从 SwiftUI 端注入参数)。这就是我如何获取在 iPad 上使用的表单.sheet对于我的用例来说太大了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iPad 上具有自定义尺寸的 SwiftUI Sheet() 模式 的相关文章

  • xcode 9.0.1 / swift 4,没有使用 Objective-C 选择器 'onClick:forEvent:' 声明的方法 [重复]

    这个问题在这里已经有答案了 I use swift 4为了构建我的 UI 我创建了一个UIButton并想为其添加一个目标 但编译器会抛出警告 No method declared with Objective C selector onC
  • 在 Swift 中以编程方式为 iOS 制作带有名字首字母的图像,例如 Gmail

    我需要在 UITableView 中显示与其姓名相对应的每个用户的个人资料图片 在下载图像之前 我需要显示一张带有他名字的第一个字母的图像 就像在 GMail 应用程序中一样 如何在 Swift for iOS 中以编程方式执行此操作 不需
  • 检查 Swift 中关联类型是否符合协议

    在类似情况下 如何检查对象是否符合 可表示 协议 protocol Representable associatedtype RepresentType var representType RepresentType get set cla
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 在 React Native 中将 Swift 事件发送到 Javascript 的正确流程

    我一直在尝试使用 Swift 构建全面的蓝牙功能 我目前陷入了如何将事件从 Swift 发送回 React Native 的困境 我尝试过this https stackoverflow com questions 31870775 rea
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • Xcode 错误 - 架构 x86_64 的未定义符号?

    我正在运行 Swift 4 和 Xcode 9 beta 我收到此错误 但我不知道如何解决它 我什至不知道这是什么意思 Undefined symbols for architecture x86 64 T0So22AVCapturePho
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 在 swift 中将简单字符串转换为 JSON 字符串

    我知道有一个同标题的问题here https stackoverflow com questions 30825755 convert string to json string in swift 但在那个问题中 他试图将字典转换为 JSO
  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 检测 AVAudioPlayer 中的播放结束

    我有几个短的 mp3 声音 我将它们存储在数组中 并希望连续播放它们 有什么方法可以检测 AVAudioPlayer 何时停止播放 以便我可以调用完成处理程序并播放下一个声音 我知道有一个委托 但我正在使用 Playground 和 SKS
  • 如何防止Apple Watch进入睡眠状态?

    我们正在开发一个 Apple Watch 项目 但如果不被打扰 手表就会进入睡眠状态 有什么办法可以阻止它进入睡眠状态吗 据我所知和有关该主题的其他搜索 目前还没有api可通过编程方式启用或禁用 Apple Watch 的睡眠模式
  • 所需框架与静态库

    构建现代框架 https developer apple com videos play wwdc2014 416 says 每个应用程序都有自己的自定义框架副本 https stackoverflow com a 15262463 242
  • 如何在 Swift 中获取字典中最后输入的值?

    如何获取 Swift 字典中最后输入的值 例如 我如何从下面获取值 CCC var dictionary Dictionary
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged

随机推荐

  • Ionic 4 Angular 路由器导航并清除上一页的堆栈/历史记录

    我正在使用 Ionic 4 和 Angular 路由器开发一个应用程序 我想导航到另一个页面并清除页面堆栈 在 Android 原生中 它是这样的 Intent intent new Intent NewActivity this Main
  • 带有 attr_accessor 的类上的 Ruby instance_eval

    我了解之间的基本区别instance eval and class eval 但我在玩的时候发现了一些奇怪的事情attr accessor 这是一个例子 A Class new A class eval attr accessor x a
  • 如何在 Markdown 中为 PDF 文档添加图像作为页眉/页脚

    我想将图像作为页眉和页脚 与我的组织的视觉标识保持一致 添加到 PDF 报告中 我已经设法在 Sweave 中做到这一点 但我也希望能够仅使用 Markdown 来做到这一点 我可以使用插入图像 footer H R Footer pdf
  • C# .NET - 固定证书颁发机构 - 我做得正确吗?

    我的软件使用 HTTPS 连接连接到 Dropbox 以检索一些敏感数据 我想固定证书颁发机构以防止中间人攻击 到目前为止我有以下代码 static bool VerifyServerCertificate object sender X5
  • 独立于AWS Lambda函数的Python子进程

    我已成功创建一个读取和写入 RDS 的 Lambda 函数 app1 我的Lambda函数是用python2 7编写的 并作为压缩包上传 我在与 RDS 和 Lambda 函数相同的 VPC 中的 EC2 实例上创建并测试了压缩包 接下来
  • CSS 中的负边距如何工作以及为什么是 (margin-top:-5 != margin-bottom:5)?

    垂直定位元素的一个常见技巧是使用以下 CSS item position absolute top 50 margin top 8px half of height height 16px 当在 Chrome 中的指标视图中看到时 您会看到
  • 如何在 SVG 矩形中放置文本并使其居中

    我有以下矩形
  • git删除了所有内容,如何恢复文件和文件夹

    这是我第一次使用git 我想将现有的项目导入github 然后所有内容都被删除了 搜索答案后 我认为 git 在 git pull 后删除了文件 我正在尝试恢复文件和文件夹 但我找不到如何执行此操作 我做了下一个 jesus jesus K
  • 数值向量运算符重载+右值引用参数

    我有下面的数值向量模板类 用于数值计算的向量 我正在努力让它成为可能D A B C所有变量都是Vector对象 A B and C不应修改 我的想法是使用Vector operator Vector B 这样在 希望 Rvalue 之后Ve
  • java.lang.ClassCastException:android.view.ViewGroup$LayoutParams 无法转换为 android.widget.Gallery$LayoutParams

    我正在尝试添加Fancycoverflow在我的应用程序中 它可以很好地处理静态图像 如这个例子 但我在适配器中做了一些更改 我尝试运行我的应用程序 它崩溃并显示以下错误 FATAL EXCEPTION main java lang Cla
  • 如何使用前缀/后缀重命名?

    我该怎么做mv original filename new original filename无需重新输入原始文件名 我想象能够做类似的事情mv p new original filename也许mv original filename n
  • Java 关键字作为变量

    在VB NET中 我们可以用括号将变量名括起来 并使用关键字作为变量名 如下所示 Dim new As String C 等效项 string new 我想知道 Java 是否有相当于这样做的东西 不可以 您可以添加下划线或类似的废话 但基
  • 没有catalina.out

    我不知道如何设置以及设置什么 以便在我的计算机上的 Tomcat 上安装 catalina out 我在 Windows XP 上使用 Tomcat 6 0 28 压缩版本 要启动服务器 我只需运行startup bat file 难道我做
  • 我可以在gdb下打印gdtr和gdt描述符吗?

    I want to use gdb to see my GDTR LDTR TTR and segment register 不可见部分 x86 所以在 gdb 中我输入 p x gdtr 等 但结果是 6 值无法转换为整数 在 gdb 中
  • C 和 C++ 编码标准

    关于 C 和 C 编码标准的最佳实践是什么 是否应该允许开发人员随意将它们混合在一起 链接 C 和 C 目标文件时是否存在任何复杂情况 像传统上用 C 编写的套接字库之类的东西是否应该保留在 C 中并保存在单独的源文件中 即将 c 代码保存
  • Django CSRF 检查因 Ajax POST 请求而失败

    我可以通过我的 AJAX 帖子获得一些遵守 Django 的 CSRF 保护机制的帮助 我已按照此处的说明进行操作 http docs djangoproject com en dev ref contrib csrf 我已经准确地复制了该
  • ARKit 1.5 如何获取垂直平面的旋转

    我正在尝试垂直平面 并尝试将节点放置在墙上 并根据该垂直平面进行正确的旋转 这是被点击的垂直平面的 ARHitTestResult let hitLocation sceneView hitTest touchPoint types exi
  • 在没有互联网连接的计算机上使用 Scala

    我是 Scala 新手 如果问题绝对显而易见 我很抱歉 我的计算机上安装了 Eclipse Photon 想要编辑 Scala 代码并生成可运行的 jar 棘手的部分是我的计算机 Centos7 无法访问互联网 我记住两个潜在的问题 手动下
  • 如何在具有角度嵌套数据组的材料表中显示拆分标题

    当数据作为对象的嵌套数组出现时 我在材料表中显示数据时遇到问题 我想显示当前显示在 stackblitz 中的表格 如果我用我的更改现有数据newData变量它将开始破坏整个表 谁能指导我如何通过材料表中的一组嵌套数据实现拆分标题功能 我想
  • iPad 上具有自定义尺寸的 SwiftUI Sheet() 模式

    如何使用 SwiftUI 控制 iPad 上模态表的首选演示大小 我很惊讶在谷歌上找到这个问题的答案是多么困难 另外 了解模式是否通过向下拖动 取消 或实际执行自定义积极操作来关闭的最佳方法是什么 以下是我在 iPad 上使用 SwiftU