iPad 弹出窗口中的 NavigationView 在 SwiftUI 中无法正常工作

2024-03-18

我有以下代码,当点击按钮时显示弹出窗口:

struct ContentView: View {

    @State private var show = false

    var body: some View {

        Button("Open") {
            self.show.toggle()
        }.popover(isPresented: $show, content: {
//            NavigationView {
                ScrollView {
                    ForEach(0...10, id: \.self) {_ in
                        Text("Test popover ...")
                    }.padding()
                }
//            }
        })

    }
}

如果我添加一个NavigationView在弹出窗口的内容中,我得到这个:

知道为什么会发生这种情况吗?

如果我为内容设置固定框架,效果很好,但我不想这样做,因为我希望弹出窗口根据其内容调整大小。


可能在 iPad 上,他们在尺寸检测方面遇到了先有鸡还是先有蛋的问题,所以只是最终确定了最小值。

无论如何,解决方案是设置.frame明确地,要么使用预定义值(对于 iPad 来说还不错),要么使用动态计算(例如,从外框通过GeometryReader)

这是一个例子。使用 Xcode 12 / iPadOS 14 进行测试

struct TestPopover: View {

    @State private var show = false

    var body: some View {
        GeometryReader { gp in
            VStack {
                Button("Open") {
                    self.show.toggle()
                }.popover(isPresented: $show, content: {
                    NavigationView {
                        ScrollView {   // or List
                            ForEach(0...10, id: \.self) {_ in
                                Text("Test popover ...")
                            }.padding()
                        }
                        .navigationBarTitle("Test", displayMode: .inline)
                    }
                    .frame(width: gp.size.width / 3, height: gp.size.height / 3)
                })
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
}

变体 2:部分根据外部尺寸计算,部分根据内部尺寸计算。

struct TestPopover: View {

    @State private var show = false
    @State private var popoverWidth = CGFloat(100)

    var body: some View {
        GeometryReader { gp in
            VStack {
                Button("Open") {
                    self.show.toggle()
                }.popover(isPresented: $show, content: {
                    NavigationView {
                        ScrollView {   // or List
                            ForEach(0...10, id: \.self) {_ in
                                Text("Test popover ...").fixedSize()
                            }.padding()
                            .background(GeometryReader {
                                Color.clear
                                    .preference(key: ViewWidthKey.self, value: $0.frame(in: .local).size.width)
                            })
                            .onPreferenceChange(ViewWidthKey.self) {
                                self.popoverWidth = $0
                            }
                        }
                        .navigationBarTitle("Test", displayMode: .inline)
                    }
                    .frame(width: self.popoverWidth, height: gp.size.height / 3)
                })
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
}

struct ViewWidthKey: PreferenceKey {
    typealias Value = CGFloat
    static var defaultValue = CGFloat.zero
    static func reduce(value: inout Value, nextValue: () -> Value) {
        value += nextValue()
    }
}

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

iPad 弹出窗口中的 NavigationView 在 SwiftUI 中无法正常工作 的相关文章

  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S
  • 在 SWIFT 中发送本地通知

    我将此代码添加到我的第一个 ViewController 中 Step 1 Ask permission from User let center UNUserNotificationCenter current center reques
  • CAShapeLayer 上的渐变颜色效果

    我正在尝试在 CAShapeLayer 上应用渐变颜色 为此我编写代码 void addCircle Drawing code UIBezierPath aPath UIBezierPath bezierPathWithArcCenter
  • 修改 SCNParticleEventBlock 中的 SCNParticleSystem 颜色不起作用

    鉴于提供的示例代码handle forProperties handler https developer apple com documentation scenekit scnparticlesystem 1523251 handle
  • iPad 中的 Adwhirl 广告

    您好 我正在开发一个通用应用程序 我正在 Iphone 上显示 adWhirl 广告 其工作正常现在我想在 Ipad 中显示广告 我对此有一点疑问 1 Is there any Configuration changes in Adwhir
  • 寻找可靠的方法来选择iPhone 13微距相机设备

    我正在使用 objc 开发一个应用程序 我必须选择 iPhone 13 Pro 和 13 Pro Max 中配备的新微距摄像头 目前 我在所有其他设备上选择我的相机 并剪掉此代码 AVCaptureDeviceDiscoverySessio
  • 在 iOS 上构建 WebRtc

    我按照以下说明成功地在 MAC 上构建了 WebRTC http www webrtc org reference getting started http www webrtc org reference getting started
  • 如何在 Alamofire 中使用“responseDecodable”方法?

    I have been trying to use responseDecodable method from Alamofire but I m getting Generic parameter T could not be infer
  • HttpClient setReachabilityStatusChangedBlock 声明没有接口

    尝试使用 AFNetworkings ReachabilityStatusChanged 但得到 HTTPCLIENT 没有可见的 interface 声明选择器 setReachabilityStatusChangeBlock 但Http
  • 如何在 iOS 中创建多行表格单元格?

    如何让第二个单元格扩展以适合文本而不是缩放文本 iOS 中有内置的方法可以做到这一点 还是我必须想出一些自制的解决方案 如果您查看 iOS 联系人应用程序 会发现有一个类似地址的框 但我找不到如何实现这一点 对于任何希望将来实现这一目标的人
  • 如何在javascript中计算日出和日落?

    我正在使用appcelerator titan开发一个IOS应用程序 我想让我的应用程序在日出和日落时向用户发送本地通知 解决这个问题的一个好工具是使用 YQL 的雅虎天气 但是 雅虎天气仅供非商业用途 我正在尝试找到一个javascrip
  • 强制本地化图像或图像资产

    正如在这个问题中 如何强制 NSLocalizedString 使用特定语言 https stackoverflow com questions 1669645 how to force nslocalizedstring to use a
  • Objective c RSA 与 OAEP 填充 sha256 之前的 ios 10

    我正在研究一种在iPhone中使用RSA加密方法的加密方法 到目前为止我可以用这种方法实现获取加密字符串 该字符串被服务器成功解密 SecKeyRef keyRef self addPublicKey pubKey SecKeyAlgori
  • 如何在禁用状态下更改 UIButton 图像 alpha?

    我有一个带有图像的 UIButton 在其禁用状态下 该图像应具有 0 3 alpha UIButton button UIButton buttonWithType UIButtonTypeCustom UIImage arrowImag
  • AST 文件格式错误或损坏

    我有一个问题 我不知道为什么会发生这种情况 但很可能是因为我错误地按了 移动到垃圾箱 到某些系统框架 我收到一条错误消息 AST 文件格式错误或损坏 找不到 AST 文件引用的文件 Users username myProject Quar
  • 如何动态添加XCTestCase

    我正在为一个白标签项目编写 UI 测试 其中每个应用程序都有一组不同的菜单项 测试点击每个菜单项并截取屏幕截图 使用快车道快照 https docs fastlane tools actions snapshot 目前这一切都发生在一个内部
  • iOS 上的推送通知渐进式 Web 应用程序

    我需要开发一个集成了推送通知的渐进式网络应用程序 在网上搜索我发现了关于这个主题的不同意见 如果我理解正确的话 目前我们无法在移动版 safari 中推送通知 但仅限桌面版 这样对吗 你有什么建议来获得相同的结果吗 我不是iOS专家 我想知
  • Objective-C 中 NSURL 为 null 而 NSString 是正确的

    我有一个NSString包含一个 url 以及当我分配时NSURL与NSString NSURL 输出 空 这是因为url中有一些非法字符 导致NSURL不编码就无法读取NSString包含网址 NSString u incomingUrl
  • ios swift 如何将默认语言设置为阿拉伯语?

    我正在开发一个有两种语言的应用程序 即英语和阿拉伯语 我用英语编写了该应用程序 然后用阿拉伯语本地化了该应用程序 更改语言时需要重新启动应用程序 我唯一的问题是 第一次安装应用程序时如何将默认语言设置为阿拉伯语 我尝试在编辑方案部分将语言设

随机推荐

  • Ubuntu 16.10 x64 上的 Laravel 5.3 的 Cron 作业

    我正在运行 Digital Ocean 的 Ubuntu 16 10 x64 并在服务器上部署了 php Framework Laravel 5 3 28 在大多数情况下 一切都正常工作 但是我试图让 crontab 调用 artisan
  • Hudson 经验 - 构建矩阵项目

    有人尝试过该功能并有一些反馈吗 或者有人知道一些有用的示例来查找吗 几个月前我尝试过这个功能 但我不再使用它 只是因为我不需要它 而不是因为它不是一个好功能 基本上 您定义 n 个轴 每个轴都是一个具有多个值的属性 让我们举个例子 您定义了
  • 是否可以使用 AJAX 将图像文件上传到 Domino 服务器?

    是否可以使用 AJAX 将图像文件上传到 Domino 服务器 我正在尝试从 Android 手机上传照片 我可以将图像数据发送回 Domino 中的富文本字段 但我不知道如何将其渲染为多米诺表单上的图像 理想情况下 我想通过 ajax 发
  • 公共记录类型的构造函数?

    假设我想要一个记录类型 例如 type CounterValues Values int list IsCorrupt bool 问题是 我想创建一个构造函数 将传递的整数列表转换为一个没有负值的新列表 它们将被 0 替换 并且仅当在构造时
  • 无法将 NULL 值插入 AspNetUsers 表“Discriminator”列

    代码首次迁移后 使用寄存器添加用户失败 并显示 无法将 NULL 值插入表 aspnet BSF2013 20130918101120 dbo AspNetUsers 列 Discriminator 列不允许为空 创建用户代码是项目模板生成
  • 如何在计时器到期时关闭 InfoBox.Popup?

    我在 Outlook 2013 中从其他帖子中拼凑出了这个测试过程 它应该显示一个弹出框 然后在 3 秒后关闭 它永远不会关闭 Sub MessageBoxTimer Dim AckTime As Integer InfoBox As Ob
  • JLabel 超链接可在正确的 URL 处打开浏览器

    我需要使用 Java Swing 创建一个可单击的标签 并且能够打开桌面上的默认浏览器并将其重定向到特定的 url 我的代码能够打开浏览器 但无法将其重定向到正确的网址 加载默认主页 我的测试代码 import java awt impor
  • Node.js 用户名和密码认证

    我目前正在使用构建一个网络应用程序Node js and Express js 我正在寻找一种方法 在我的主目录中使用用户名和密码进行简单的服务器端身份验证app js正在监听的文件post请求于http www domain com lo
  • 如何在 Android 选择器中定义粗体?

    在我的 Android 应用程序中 我有几个单选按钮 它们应该具有不同的颜色并在选择时变为粗体 我设法通过定义来获得不同的颜色radio pick color xml可绘制文件
  • iOS 强密码自动填充未显示在确认密码上

    iOS 会自动填充第一个密码字段 但不会填充第二个密码字段 如何像应用程序中那样自动填充密码和确认密码字段 更新 系统似乎将注册表单视为登录表单 因此它会自动填充第一个密码字段 另外 当我导航回登录屏幕时 系统提示我是否要将密码保存在钥匙串
  • 如何在IDEA中打开项目时停止自动刷新SBT模块?

    我们有多个 Play 2 应用程序和模块 但我在将 IntelliJ IDEA 13 集成到我的开发流程中时遇到了问题 我有一个基于应用程序的公共父级的空项目 并且我已使用导入现有 SBT 项目选项将每个应用程序作为模块导入 我的问题是 每
  • Plotly for R:当数据集包含大于 1000 的数字时,删除 y 轴上出现的 k

    您好 关于plotly的一个 简单 问题 我想删除当数据集包含大于10000的数字时似乎自动出现在y轴上的k 我尝试将数据上传到plotly在线并将 k 放入以及 例如使用数据的子集 date lt c 1 07 1987 2 07 198
  • 应用程序部署到网络驱动器

    我有一个 NET 4 WPF需要在公司网络内运行的应用程序 该应用程序不使用本地文件 它确实有一个app config文件 但它只包含一些connection strings 用于数据存储 但中央SQL server数据库 将应用程序文件放
  • 如何在 python Bottle 中提供带有希伯来语名称的静态文件?

    我收到客户端的请求 要求从服务器下载一些文件 文件名是希伯来语 bottle get download
  • Python/ Boto 3:如何从AWS S3检索/下载文件?

    在Python Boto 3中 发现从S3单独下载文件到本地可以执行以下操作 bucket self aws connection get bucket aws bucketname for s3 file in bucket list i
  • 使用 CakePHP 将视图嵌入到另一个视图中

    我有一个新闻控制器 每个新闻项目都有一个 查看 操作 在每个新闻项目的 查看 操作中 我想包含另一个视图 即评论控制器的 添加 操作 基本上 我需要在每个新闻项目的页面上添加一个表单来添加评论 我有两种观点 但我无法将它们联系起来 我尝试使
  • 期望在 while 循环内 - 永远循环

    我是新来的脚本 所以请原谅我的绊脚石 以下是我的预期脚本的主要内容 目的是滚动浏览多个输出屏幕 在每个屏幕之后都会提示用户 继续 y n 最后 当没有更多屏幕时 会显示 提示符 这应该导致执行脱离 while 循环 set more scr
  • 强制 Expression<> 计算局部变量

    我的 LinqPad 中有类似的东西 void Main var t1 DateTimeOffset Parse 10 1 2012 int n1 1 Expression
  • 我如何委托给 Scala 中的成员?

    在 Scala 中是否可以这样写 trait Road class BridgeCauseway extends Road implements method in Road class Bridge extends Road val ro
  • iPad 弹出窗口中的 NavigationView 在 SwiftUI 中无法正常工作

    我有以下代码 当点击按钮时显示弹出窗口 struct ContentView View State private var show false var body some View Button Open self show toggle