小编Tim*_*mmy的帖子

iOS 16 SwiftUI 列表背景

SwiftUI随着iOS 16 的新更新List,不再依赖UITableView. 因此,我们用来设置List背景颜色的以下代码片段.clear现在毫无用处:

UITableView.appearance().backgroundColor = .clear
Run Code Online (Sandbox Code Playgroud)

我看到有人曾经introspect解决过这个问题,但是有人知道另一种可能更干净的方法来实现相同的行为吗?

另请注意,在 上macOS,以下工作正常(使用Xcode 14 beta&测试macOS Ventura):

extension NSTableView {
    open override func viewDidMoveToWindow() {
        super.viewDidMoveToWindow()
        backgroundColor = NSColor.clear
        enclosingScrollView!.drawsBackground = false
    }
}
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-list ios16

29
推荐指数
4
解决办法
2万
查看次数

在 Xcode 14.1 模拟器中添加语言问题

我将 Xcode 更新至 14.1。但是当我想在“设置”中添加一种语言时,它停留在这个页面上,我无法执行任何操作。

我所能做的就是删除所有内容和设置以恢复正常状态。它适用于我的 MacBook Air M1,但不适用于我的 MacBook Pro 2019 Intel i7

在此输入图像描述

xcode ios xcode14

9
推荐指数
1
解决办法
1409
查看次数

TabView 内的 SwiftUI iOS 16 NavigationPath 警告:NavigationAuthority

我有一个TabView,每个选项卡都有它自己的NavigationPath,我正在一个ObservableObject.

@MainActor final class Router: ObservableObject {
    @Published var homeNavigationPath = NavigationPath()
    @Published var searchNavigationPath = NavigationPath()
    @Published var notificationsNavigationPath = NavigationPath()
    @Published var profileNavigationPath = NavigationPath()
}
Run Code Online (Sandbox Code Playgroud)

我这样做是为了让每个选项卡都可以自行 PopToRoot。一切似乎都运行良好,但是我在控制台中收到以下消息......

更新 NavigationAuthority 绑定路径尝试每帧更新多次。

有谁知道这意味着什么?我做错了什么还是拥有多个NavigationPath这样的 s 完全没问题吗?

tabview swiftui ios16 navigationpath

9
推荐指数
0
解决办法
1298
查看次数

如何动态创建 SwiftUI 场景?

我一直在研究 SwiftUI 并从这个WWDC20 视频中了解应用程序、场景和视图。我试图通过一个示例应用程序来理解这些概念,该应用程序显示电影列表并帮助预订电影。

iOS和iPadOS SwiftUI项目有以下App:

@main
struct HelloIOSSwiftUIApp: App {

    // Attach the app delegate to the swiftUI app
    @UIApplicationDelegateAdaptor
    var appDelegate: AppDelegate
    
    var body: some Scene {
        MovieListScene()
    }
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码可以推断出HelloIOSSwiftUIApp有一个名为MovieListScene的场景。因此,要向应用程序添加新场景,

@main
struct HelloIOSSwiftUIApp: App {

    // Attach the app delegate to the swiftUI app
    @UIApplicationDelegateAdaptor
    var appDelegate: AppDelegate
    
    var body: some Scene {
        MovieListScene()
        BookMovieScene()
            .handlesExternalEvents(matching: ["book movie"])
        
    }
}
Run Code Online (Sandbox Code Playgroud)

现在声明了两个场景,SwiftUI 启动应用程序并显示第一个场景的内容。

在上面的两个示例中,应用程序的场景都是在编译时声明的。那么,如何动态地向应用程序添加/删除新场景呢?我想从配置文件中读取一些数据并决定是否应显示特定场景。我怎样才能实现这种行为?或者应用程序应该在编译时声明所有可能的场景(如上所示)?

我知道 SwiftUI 视图可以通过使用@State@StateObject@ObservedObject属性@Published包装器在运行时更新。SwiftUI 视图是其状态的函数......因此更新状态可以更改视图。我怎样才能对场景做同样的事情?

scene ios swiftui ipados

8
推荐指数
0
解决办法
141
查看次数

如何打印 SwiftUI 视图

我想使用SwiftUI View 在 macOS (Ventura) 上打印标签之类的东西。但这会导致一张白纸:

func startPrinting() {
    let printView = NSHostingView(rootView: Text("I want to print"))
    printView.frame.size = CGSize(width: 200, height: 200)

    let printInfo = NSPrintInfo()
    printInfo.topMargin = 0
    printInfo.leftMargin = 0
    printInfo.bottomMargin = 0
    printInfo.rightMargin = 0

    let printOperation = NSPrintOperation(view: printView, printInfo: printInfo)
    printOperation.run()
}
Run Code Online (Sandbox Code Playgroud)

当我切换Text到时TextField,它被打印,但我不知道为什么。

如何打印SwiftUI视图?

macos appkit swift swiftui

6
推荐指数
1
解决办法
372
查看次数

尝试连接到目标进行远程 GDB 调试时出现连接超时错误

当尝试使用 GDB 进行远程目标调试时,出现以下错误:

连接超时

远程目标是基于ARM的,主机是X86。我遵循的步骤如下:

  1. 通过发出以下命令在目标上运行 gdbserver:

    gdbserver --attach :1000 937

    其中 937 是我要调试的应用程序的 PID。

  2. 从主机端调用GDB。

    gdb-multiarch applicationName

    (gdb) target remote xx.xxx.xxx.xx:1000

    其中xx.xxx.xxx.xx是远程计算机的 IP 地址。

谁能建议我在这里缺少什么?

gdbserver

5
推荐指数
1
解决办法
1872
查看次数

jetpack compose 中的 ClickableText 样式

我正在尝试更改可点击文本的样式,主要是其字体和颜色。这是我的代码:

ClickableText(
    text = AnnotatedString(stringResource(R.string.forgot_password)),
    onClick = { offset ->
        Log.d("ClickableText", "$offset -th character is clicked.")
    }
)
Run Code Online (Sandbox Code Playgroud)

这只是使用默认主题。如何应用不同的颜色或字体?

android android-jetpack android-jetpack-compose

4
推荐指数
1
解决办法
6826
查看次数

在 macOS 上运行多平台 SwiftUI 应用程序时是否可以跳过 launchscreen.storyboard 文件?

我在XcodeMultiplatform中创建应用程序时选择了模板(它是 Xcode 14.0 beta,以防万一)。我的目的是在 iOS 上运行该应用程序。我选择模板只是因为我认为看看它如何在.SwiftUIMultiplatformmacOS

在 WWDC 2020 上,Apple推出了一种Info.plist基于方法来实现应用程序的启动屏幕SwiftUI不幸的是,这种方法在Xcode 13中被破坏了。我的实验表明它在Xcode 14.0 beta中仍然不起作用,因此我通过使用文件来实现启动屏幕来解决该问题storyboard

但是,由于storyboard基于UIKit,这意味着它不适用于macOS。这解释了为什么当我尝试在 上运行应用程序时Xcode报告以下错误macOS

iOS 故事板不支持设备类型“mac”

所以我想知道,鉴于基于的方法在XcodeInfo.plist 13 和 14中被破坏,如何在多平台应用程序中实现启动屏幕?是否可以跳过该文件?我检查了Xcode但没有找到方法。storyboardmacOS

另一个问题:在 上编写应用程序的常见方法是macOS,如上所述编写多平台应用程序,还是编写两个单独的应用程序,一个用于iOS,一个用于macOS?谢谢。

macos multiplatform ios launch-screen swiftui

0
推荐指数
1
解决办法
928
查看次数