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) 我将 Xcode 更新至 14.1。但是当我想在“设置”中添加一种语言时,它停留在这个页面上,我无法执行任何操作。
我所能做的就是删除所有内容和设置以恢复正常状态。它适用于我的 MacBook Air M1,但不适用于我的 MacBook Pro 2019 Intel i7
我有一个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 完全没问题吗?
我一直在研究 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 视图是其状态的函数......因此更新状态可以更改视图。我怎样才能对场景做同样的事情?
我想使用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视图?
当尝试使用 GDB 进行远程目标调试时,出现以下错误:
连接超时
远程目标是基于ARM的,主机是X86。我遵循的步骤如下:
通过发出以下命令在目标上运行 gdbserver:
gdbserver --attach :1000 937
其中 937 是我要调试的应用程序的 PID。
从主机端调用GDB。
gdb-multiarch applicationName
(gdb) target remote xx.xxx.xxx.xx:1000
其中xx.xxx.xxx.xx是远程计算机的 IP 地址。
谁能建议我在这里缺少什么?
我正在尝试更改可点击文本的样式,主要是其字体和颜色。这是我的代码:
ClickableText(
text = AnnotatedString(stringResource(R.string.forgot_password)),
onClick = { offset ->
Log.d("ClickableText", "$offset -th character is clicked.")
}
)
Run Code Online (Sandbox Code Playgroud)
这只是使用默认主题。如何应用不同的颜色或字体?
我在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?谢谢。