我希望我的预览只显示视图的大小,而不显示整个 iPhone。我已经用这段代码尝试过了:
struct TimerCardView: View {
var body: some View {
Text("Hello, World!")
.padding()
.background(.gray)
}
}
struct TimerCardView_Previews: PreviewProvider {
static var previews: some View {
TimerCardView()
.previewLayout(.sizeThatFits)
}
}
Run Code Online (Sandbox Code Playgroud)
但什么也没发生。我究竟做错了什么?我很感激帮助
在 SwiftUI 中使用不同的视图组合时,我们可以采取两种方法:
@ViewBuilder func makeButtonLabel() -> some View {
if isPlaying {
PauseIcon()
} else {
PlayIcon()
}
}
Run Code Online (Sandbox Code Playgroud)
struct SongRow: View {
var song: Song
@Binding var isPlaying: Bool
...
var body: some View {
HStack {
if isPlaying {
PauseIcon()
} else {
PlayIcon()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪一个更好,我们如何衡量它?
从分析上来说,在我看来,第二个在更大的视图块中具有更好的性能,特别是我们可以在预览的加载时间中看到它,但我对此没有任何线索。
有谁知道如何阻止 swiftUI 预览打开麦克风?我在工作时戴着蓝牙耳机,每次预览启动时都会启用麦克风。这会降低我的音频质量,因为耳机会在播放和输入之间分配带宽。
我的解决方法是进入声音设置,然后将我的默认输入切换到我的网络摄像头或 macbook 本身。每次启用时,xcode 中的预览都会打开麦克风,这太奇怪了。
上下文:我有一个 MBP 2019 Xcode 12.4 Catalina
谢谢!
由于我添加到项目中的 Swift 包,我收到此错误。
HumanReadableSwiftError
SettingsError: noExecutablePath(<IDESwiftPackageStaticLibraryProductBuildable:ObjectIdentifier(0x000060001598bf60):'PersonaInquirySDK2'>)
Run Code Online (Sandbox Code Playgroud)
这是包裹。
https://github.com/persona-id/inquiry-ios-2.git
这是我可以修复的问题,还是帮助 Xcode 忽略预览?
我有一个 Mac 应用程序,主要是用 AppKit 编写的。随着时间的推移,我在 SwiftUI 中添加新视图,并且一直使用 SwiftUI 预览来预览新的 SwiftUI 视图和旧的 AppKit 视图/视图控制器(请参阅预览不仅仅适用于 SwiftUI 视图)。
我遇到的一个麻烦是启动 SwiftUI 预览会打开我的应用程序的主窗口。这是预览如何通过常规启动流程的结果,例如调用applicationDidFinishLaunching(_:)我的应用程序代理,这是我在启动时实例化并显示应用程序主窗口的地方。当然,如果我在预览中处理视图,我不希望发生这种情况。
我的 AppDelegate 如下所示:
@NSApplicationMain
public class AppDelegate: NSObject, NSApplicationDelegate {
lazy var mainWindowController = MainWindowController()
public func applicationDidFinishLaunching(_ aNotification: Notification) {
// Nasty hack :(
let isInSwiftUIPreview = ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1"
if !isRunningInTest() && !isInSwiftUIPreview {
mainWindowController.showWindow(self)
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如您所见,如果此代码在测试或 SwiftUI 预览中运行,我添加了不显示主窗口的特殊情况。这味道让我觉得我做错了。
事实上,Apple 在Mastering Xcode Previews 的41:41 中提到了这个确切的问题。他们建议让您的应用程序具有场景感知能力,并使用 aUISceneDelegate来完成这项工作。然而,这是一个仅限 iOS/catalyst 的 …
appkit nsapplication-delegate swift swiftui swiftui-previews
更新 Xcode 13 下面的代码示例在 Xcode 13 中按预期工作。
不幸的是,当前没有解决方法可以让您在实时预览之外预览此内容。
是否可以在不运行实时预览的情况下创建所呈现工作表的 SwiftUI 预览?例如:
struct Sheet_Previews: PreviewProvider {
static var previews: some View {
Text("Background").sheet(isPresented: .constant(true)) {
Text("Sheet")
}
}
}
Run Code Online (Sandbox Code Playgroud)
上述结果产生以下预览:
为了在预览中显示工作表内容,您必须运行实时预览:
在我的框架内运行SwiftUI视图预览时遇到问题。\n这是一个项目结构。
主目标(ContentView、GradientView)中的 SwiftUI 视图预览按预期工作。
\n但是,当我\xe2\x80\x99m 尝试预览UI.xcodeproject(SwiftUIView )内的视图时,我\xe2\x80\x99m 收到错误
\n\nPotentialCrashError: Update failed\n\nXCPreviewAgent may have crashed. Check ~/Library/Logs/DiagnosticReports for any crash logs from your application.\n\n==================================\n\n| RemoteHumanReadableError\n| \n| LoadingError: failed to load library at path "/Users/yevgeniy/Library/Developer/Xcode/DerivedData/Hackathon-abjguuvpzyisdncwvpeguazdifiu/Build/Intermediates.noindex/Previews/Hackathon/Intermediates.noindex/UI.build/Debug-iphonesimulator/UI.build/Objects-normal/x86_64/SwiftUIView.1.preview-thunk.dylib": Optional(dlopen(/Users/yevgeniy/Library/Developer/Xcode/DerivedData/Hackathon-abjguuvpzyisdncwvpeguazdifiu/Build/Intermediates.noindex/Previews/Hackathon/Intermediates.noindex/UI.build/Debug-iphonesimulator/UI.build/Objects-normal/x86_64/SwiftUIView.1.preview-thunk.dylib, 0x0002): tried: \'/Users/yevgeniy/Library/Developer/Xcode/DerivedData/Hackathon-abjguuvpzyisdncwvpeguazdifiu/Build/Intermediates.noindex/Previews/Hackathon/Products/Debug-iphonesimulator/SwiftUIView.1.preview-thunk.dylib\' (errno=2), \'/Applications/Xcode_14.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Users/yevgeniy/Library/Developer/Xcode/DerivedData/Hackathon-abjguuvpzyisdncwvpeguazdifiu/Build/Intermediates.noindex/Previews/Hackathon/Intermediates.noindex/UI.build/Debug-iphonesimulator/UI.build/Objects-normal/x86_64/SwiftUIView.1.preview-thunk.dylib\' (errno=2), \'/Users/yevgeniy/Library/Developer/Xcode/DerivedData/Hackathon-abjguuvpzyisdncwvpeguazdifiu/Build/Intermediates.noindex/Previews/Hackathon/Intermediates.noindex/UI.build/Debug-iphonesimulator/UI.build/Objects-normal/x86_64/SwiftUIView.1.preview-thunk.dylib\' (mach-o file, but is an incompatible architecture (have \'x86_64\', need \'arm64\')))\n| \n| ==================================\n| \n| | MessageSendFailure: Message send failure for <ServiceMessage 115: update>\nRun Code Online (Sandbox Code Playgroud)\n~/Library/Logs/DiagnosticReports 文件夹为空。
\n在 …
我的项目由一个主要的 iOS 应用程序项目和三个用于表示层、域层和数据层的附加框架组成。我自己的框架嵌入在主要目标中。第三方框架由 CocoaPods 管理并动态链接。
现在,如果我尝试预览我的代码,则会收到以下错误:
RemoteHumanReadableError: Failed to update preview.
Error encountered when sending 'previewInstances' message to agent.
==================================
| RemoteHumanReadableError
|
| LoadingError: failed to load library at path "/Users/lucas/Library/Developer/Xcode/DerivedData/Envim-grqjeyyonytbnxcujdcadldmkoni/Build/Intermediates.noindex/Previews/Envim (iOS)/Products/Debug-iphonesimulator/Presentation.framework/Presentation": Optional(dlopen(/Users/lucas/Library/Developer/Xcode/DerivedData/Envim-grqjeyyonytbnxcujdcadldmkoni/Build/Intermediates.noindex/Previews/Envim (iOS)/Products/Debug-iphonesimulator/Presentation.framework/Presentation, 0): Library not loaded: @rpath/Resolver.framework/Resolver
| Referenced from: /Users/lucas/Library/Developer/Xcode/DerivedData/Envim-grqjeyyonytbnxcujdcadldmkoni/Build/Intermediates.noindex/Previews/Envim (iOS)/Products/Debug-iphonesimulator/Presentation.framework/Presentation
| Reason: image not found)
Run Code Online (Sandbox Code Playgroud)
我希望我包含了所有相关信息。如果我忘记了什么,请随时索取。
我们的 SwiftUI 项目中有一个 MLPackage 文件。每当我们尝试在视图文件上加载预览时,Xcode 就会陷入“构建预览”的无限循环中。构建成功,但立即开始另一个构建。因此,无法实际查看/使用预览。
注意:警告不相关。
检查控制台日志(不在 Xcode 中)显示以下内容:
Xcode (PreviewsPipeline)
=== Requesting updating previews for reasons [
File "foo.mlpackage" changed,
Preview Settings changed,
]
Run Code Online (Sandbox Code Playgroud)
将模型完全从项目中取出可以解决这个问题,所以我很确定它们就是原因。我们还在编译时对模型进行加密,但这对于调试版本是禁用的。我们还尝试完全删除加密步骤,但没有感到高兴。
据我(不太)理解,mlpackage 包含元数据、描述拓扑的 .mlmodel 文件以及包含 NN 权重的压缩的weights.bin。我对该文件中“变化”的猜测是运行时执行一些预编译或解压缩并将结果存储在该包/文件中。
有没有办法告诉 SwiftUI 预览忽略某些文件、目录或模式?
这样,mlpackage 文件可以更改,并且不会重建预览。
M1 Mac Mini,Xcode 14.2 (14C18)
我使用 SwiftUI 创建了一个应用程序,当我尝试显示按钮时,会出现以下错误消息:
Thread 1: Fatal error: No ObservableObject of type ModelData found. A View.environmentObject(_:) for ModelData may be missing as an ancestor of this view.
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 an@EnvironmentObject尝试显示我的应用程序的视图之一时,会发生这种情况。
我的代码是
struct OpportunityDetail: View {
@EnvironmentObject var modelData: ModelData
var opportunity: Opportunity
var opportunityIndex: Int {
modelData.opportunities.firstIndex(where: { $0.id == opportunity.id })!
}
var body: some View {
ScrollView {
MapView(coordinate: opportunity.locationCoordinate)
.frame(height: 300)
.ignoresSafeArea(edges: .top)
CircleImage(opportunity: opportunity)
.offset(y: -130)
.padding(.bottom, -130)
VStack {
VStack(alignment: .leading) {
Text(opportunity.position)
.font(.title)
HStack …Run Code Online (Sandbox Code Playgroud) 我正在使用方案运行预构建脚本。我的脚本启用了从正在构建的目标提供构建设置的选项。当为 SwiftUI 预览构建项目时,也会执行此脚本。我需要知道这个脚本中正在运行的构建是常规构建还是预览构建。有没有办法做到这一点以及如何做到?
我尝试export在这两种情况下在脚本中运行,但似乎两种情况下所有环境变量都是相同的。
xcode xcodebuild swiftui xcode-build-settings swiftui-previews
SwiftUI 状态属性应声明为 private。这对于从包含视图中封装它们的值很有用,但会阻止预览使用默认初始值设定项设置非默认状态。例如,这不会编译:
struct TemperatureView: View {
@State private var isHot = false
var body: some View {
Text(isHot ? "Hot" : "Cold")
}
}
struct TemperatureView_Previews: PreviewProvider {
static var previews: some View {
Group {
TemperatureView(isHot: true)
TemperatureView(isHot: false)
}
}
}
Run Code Online (Sandbox Code Playgroud)
替换private为fileprivate会导致相同的错误。如何预览私有视图状态?
swiftui-previews ×12
swiftui ×11
xcode ×6
swift ×5
appkit ×1
coreml ×1
xcode12 ×1
xcodebuild ×1