工作表关闭后 SwiftUI 导航栏项目框架未对齐

2024-05-12

在 SwiftUI 中关闭工作表后,导航栏按钮不可点击。以下是重现该问题的步骤

  1. 出示一张单子,
  2. 将应用程序移至后台一小段时间(2 秒)
  3. 恢复应用程序并向下滑动关闭工作表

现在导航栏按钮框架未对齐。点击的工作框架与按钮的可见框架不同。这在 iOS 16 模拟器上很容易重现,但在实际的 iOS 设备上会间歇性地重现。以下是重现该问题的最少代码



struct ContentView: View {
    @State private var showSheetView = false

    var body: some View {
        NavigationView {
            VStack {
                navigationBarView
                Color.blue
            }
            .sheet(isPresented: $showSheetView) {
                FilterView()
            }
            .navigationBarHidden(true)
        }
        .navigationViewStyle(.stack)
    }
    
    private var navigationBarView: some View {
        HStack(spacing: 0) {
            Spacer()
            Button {
                showSheetView = true
            } label: {
                Text("Filter")
                    .padding()
                    .background(Color.red)
            }
        }
    }
}

struct FilterView: View {
    var body: some View {
        Color.green
    }
}

我也为这个问题苦苦挣扎,这显然是苹果的一个错误。

我发现了一个丑陋的黑客来解决这个问题。但为了使它工作,我必须在每次进入背景时重新绘制我的主视图。对于我的项目来说,在他们修复实际错误之前都可以。我希望它也能帮助你

当您检测到应用程序正在移至后台时,您可以强制应用程序根据 UUID() 重绘

struct BackgroundModeSheetBugApp: App {

    @State private var id = UUID()

    var body: some Scene {
        WindowGroup {
            ContentView()
                .onReceive(NotificationCenter.default.publisher(for: UIApplication.didEnterBackgroundNotification)) { _ in
                    id = UUID()
                }
                .id(id)
        }
    }
}

我已经用您的代码对其进行了测试,它在模拟器和设备上都能正常工作

附:我也鼓起勇气用你的例子向Apple提交了一个bug

附言对于我的应用程序,我还必须包装我的主视图来破解 UIViewControllerRepresentable 以修复填充问题。

struct UIHackMainTabView: UIViewControllerRepresentable {

    func makeUIViewController(context: Context) -> UIHostingController<MainTabView> {
        let mainTab = MainTabView()
        return UIHostingController(rootView: mainTab)
    }

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

工作表关闭后 SwiftUI 导航栏项目框架未对齐 的相关文章

  • 如何获取 iTunes connect 团队 ID 和团队名称?

    我正在写下一个Appfile for fastlane 我的问题是我已经有了team name and team id在 Apple 开发中心 但我无法获取iTunes Connect ID itc team id 我正在与不同的团队合作
  • iOS 8 上的 NSRangeException

    我将 XCode 5 升级到 6 以便在 iPhone 6 和 6 Plus 上测试我的项目 但在启动时遇到了神秘的崩溃 NSArrayM objectAtIndex index 4 beyond bounds 0 3 First thro
  • 带有自定义图像标题的 swiftui 列表

    我想在 swiftui 中为列表设置图像标题 我想要的效果如下图所示 我的代码如下 import SwiftUI struct ContentView View var body some View NavigationView List
  • iOS 上服务器发送事件的 webkit 的推荐替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的本机 iOS 应用程序中接收服务器发送的事件 但我不使用 webkit Safari 根据我
  • 如何将 CGRect 转换为 MapRect

    我创建了一个如下方法将 CGRect 转换为 MapRect 如下所示 MKMapRect mapRectForRect CGRect rect CLLocationCoordinate2D topleft mapView convertP
  • 在UIView中画线

    我需要在 UIView 中画一条水平线 最简单的方法是什么 例如 我想在 y coord 200 处画一条黑色水平线 我没有使用界面生成器 也许这有点晚了 但我想补充一点 有更好的方法 使用 UIView 很简单 但相对较慢 此方法会覆盖视
  • 在 iOS 上将 SwiftUI 视图转换为 PDF

    我用 SwiftUI 画了一些漂亮的图表 因为它非常简单且容易做 然后我想将整个 SwiftUI 视图导出为 PDF 以便其他人可以以良好的方式查看图表 SwiftUI 没有直接为此提供解决方案 Cheers Alex 经过一番思考 我想到
  • iOS 版 Google Analytics 中的线程崩溃

    使用适用于 iOS 版本 3 0 9 以及一般的 3 0 x 的 Google Analytics 库 我们看到很多像下面这样的崩溃 它们似乎是随机发生的 Exception Type SIGBUS Exception Codes BUS
  • Sierra 更新后无法针对 iOS 10 进行编译

    我有一个今年八月生成的证书和配置文件 它们在 Apple 开发者门户中均有效 未过期 当我打开以 8 3 为目标的项目时 出现以下错误 No certificate matching iPhone Developer My Name ABC
  • iOS 7 MapKit 崩溃:[VKRasterOverlayTileSource invalidateRect:level:] 中的 EXC_BAD_ACCESS

    我仅在 iOS 7 上遇到无法重现的崩溃 我大量使用 MKOverlayRenderer 在地图上绘制形状 iOS 6 上不会发生此崩溃 任何与此相关的想法都会有用 Exception Type EXC BAD ACCESS Code KE
  • 使用 NSPredicate 来检测 NOT CONTAINS

    我放弃 我已经尝试了我能想象到的所有组合来检查一个字符串是否包含另一个字符串 这是描述我想要做的事情的直观语法示例 NSPredicate pPredicate NSPredicate predicateWithFormat NOT K C
  • 如何像键盘一样呈现选择器视图?

    我希望当我按下按钮 就像键盘一样 时显示 UIPickerView 然后在用户点击屏幕上的任意位置时消失 我怎样才能做到这一点 谢谢 更多背景信息 我在 UITableViewCell 中有一个名为 Months 的 UITextField
  • TabBarController:以不同方向定向视图

    我无法保持当前的观点方向 在下面的设置中 我能够将第一个视图控制器锁定为纵向 将第二个视图控制器锁定为横向或纵向 但是 当我向选项卡控制器添加第二个导航控制器 rootviewcontroller 时 整个项目中的所有视图都将变为横向和纵向
  • 加快 SpriteSheet 的 UIImage 创建速度

    我不确定我的标题是否正确 但我不确定我的问题到底在哪里 我需要从 spritesheet 加载 UIImage 数组 然后将其用作 UIImageView 中的动画 spritesheet是用TexturePacker生成的 它生成巨大的图
  • 使用自定义组件:子类 UIView 或 UIViewController?

    我正在研究 UISegmentedControl 的自定义实现 我想创建一个能够接收配置数据并从中获取类似于 UISegmentedControl 的自定义视图的组件 我开始对 UIView 进行子类化 我可以使用以下代码创建自定义 UIS
  • 如何让 iPhone 发出蜂鸣声?

    什么代码可以让我在 iPhone 上发出标准的蜂鸣声 好吧 这取决于您想要什么样的声音 以下是如何使用 AVFoundation 音频框架播放声音 import
  • UIButton 图像调整大小/缩放以适合

    我有一个非常严重的问题 我不知道如何解决 我正在对 UIButtons 框架进行动画处理 当我对其进行动画处理时 我希望按钮中的图像缩放到与按钮相同的大小 它无需在我的 iPhone 模拟器上执行任何操作即可运行 但是当我在 iPad 模拟
  • ScrollView 内的 GeometryReader 会折叠 GeometryReader,无论子尺寸如何

    我正在尝试创建一个包含绘图的子视图 我希望该绘图的大小与父容器的一部分成比例 除非将其放入层次结构上方的滚动视图中 否则效果很好 从屏幕截图中可以看出 堆栈内部的声音正如预期的那样最大 但是 当您放入滚动视图时 几何读取器的大小会折叠到接近
  • 无效的 Swift 支持 - 文件位置不正确

    我一直在尝试将新版本上传到 iTunes Connect 来更新应用程序 我第一次使用 xCode 6 但收到了一封来自 Apple 的电子邮件 内容如下 亲爱的开发者 我们发现您最近交付的 应用程序 存在一个或多个问题 要处理您的交货 必
  • 将蒙版图像作为 PNG 文件写入磁盘

    基本上 我从网络服务器下载图像 然后将它们缓存到磁盘上 但在这样做之前 我想屏蔽它们 我正在使用每个人似乎都指出的屏蔽代码 可以在这里找到 http iosdevelopertips com cocoa how to mask an ima

随机推荐