然后在 SwuftUI 视图中使用 ARClass(color: .red, name: "Test Text") 作为 SceneDelegate 中的 Environment 对象
class ARClass: ObservableObject {
@Published var bg: UIColor
@Published var name: String
init(color: UIColor, name: String) {
self.bg = color
self.name = name
}
Run Code Online (Sandbox Code Playgroud)
}
struct ARViewX: UIViewRepresentable {
var ar: ARClass
var frame: CGRect
func updateUIView(_ uiView: ARView, context: Context) {
uiView.frame = frame
uiView.ar = ar
uiView.setNeedsDisplay()
} …Run Code Online (Sandbox Code Playgroud) 目前,我可以在点击按钮时显示一个单独的PKCanvasView和 a 。PKToolPicker但是,该工具不会在选取器和画布视图之间传输。有谁知道如何链接两者,以便当我更改选择器中的工具时,该工具也会在画布视图中更新?我在下面附上了我的代码。谢谢你!
import SwiftUI
import PencilKit
struct DrawingView: View {
@State private var showPicker = false
@State private var canvasView = PKCanvasView()
var body: some View {
VStack {
PencilKitView(isActive: $showPicker, canvasView: $canvasView)
Button("Picker") { self.showPicker.toggle() }
}
}
}
struct PencilKitView: UIViewRepresentable {
typealias UIViewType = PKCanvasView
@Binding var isActive: Bool
@Binding var canvasView: PKCanvasView
let coordinator = Coordinator()
class Coordinator: NSObject, PKToolPickerObserver {
func toolPickerSelectedToolDidChange(_ toolPicker: PKToolPicker) {
// some code
}
func …Run Code Online (Sandbox Code Playgroud) 我尝试创建一个自定义 SwiftUI 菜单(基于UIMenu)。
但是,我无法触发主要操作。
当我点击时它会起作用CustomMenu,但不会触发程序操作。我究竟做错了什么?
struct CustomMenu: UIViewRepresentable {
let title: String
@Binding var isPresented: Bool
func makeUIView(context: Context) -> UIButton {
let button = UIButton(type: .system)
button.setTitle(title, for: .normal)
button.menu = UIMenu(title: "", options: .displayInline, children: [
UIAction(title: "Item 1", image: UIImage(systemName: "mic"), handler: { _ in }),
UIAction(title: "Item 2", image: UIImage(systemName: "envelope"), handler: { _ in }),
UIAction(title: "Item 3", image: UIImage(systemName: "flame.fill"), handler: { _ in }),
UIAction(title: "Item 4", …Run Code Online (Sandbox Code Playgroud) 我有这样的 UITextView 包装器,它可以工作,但是当我将它放在 List 行中时。我希望它自动调整大小,即在这种情况下具有与父级匹配的宽度 List Row VStack { },以及根据文本长度自动调整大小的高度。文本应该换行。现在它几乎可以工作了,但是像 URL 这样的较长文本超出了可用的行宽。
List {
VStack(alignment: .leading) {
if self.hasNote {
TextView(text: text)
}
}
struct TextView: UIViewRepresentable {
// MARK: - Properties
let text: String
init(text: String) {
self.text = text
}
func makeUIView(context: Context) -> UITextView {
let textView = UITextView()
//textView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
textView.backgroundColor = UIColor.clear
textView.isScrollEnabled = false
textView.attributedText = self.attributedText
textView.textContainer.lineBreakMode = .byWordWrapping
//textView.layoutIfNeeded()
textView.sizeToFit()
return textView
}
}
Run Code Online (Sandbox Code Playgroud)
更新
现在我有这样的东西,它确实适合父 SwiftUI 视图(列表中的行),但它不会包装文本(或根据内容大小垂直拉伸。如果滚动它会正确包装文本。另外,如果我设置 .frame(height: 500 …
我正在尝试将Snapkit与 iOS 应用程序集成,但我想使用 SwiftUI 而不是 UIKit。我已经使用 Snapkit 完成了所需的设置,现在我正在尝试让 Snapchat 登录按钮显示在我的应用程序中。我知道 Snapkit SDK 是为 UIKit 而不是 SwiftUI 制作的,但 SwiftUI 有一种方法可以使用 UIViewRepresentable 协议将 UIView 包装到 SwiftUI 中。我已经尝试实现此功能,但登录按钮仍然不显示。
\n\n这是我的代码:
\n\nimport SwiftUI\nimport UIKit\nimport SCSDKLoginKit\n\nstruct ContentView: View {\n var body: some View {\n SnapchatLoginButtonView()\n }\n}\n\nstruct ContentView_Previews: PreviewProvider {\n static var previews: some View {\n ContentView()\n }\n}\n\n\nstruct SnapchatLoginButtonView: UIViewRepresentable {\n\n func makeCoordinator() -> Coordinator {\n Coordinator()\n }\n\n func makeUIView(context: Context) -> SCSDKLoginButton {\n let s = SCSDKLoginButton()\n s.delegate = context.coordinator\n\n …Run Code Online (Sandbox Code Playgroud) 此视图是一个适应我的 SwiftUI 项目的 UIKit 滑块,因为在 SwiftUI 中Slider无法更改其轨道颜色,这可能是一个错误,因为您应该能够使用.accentColor.
不管怎样,这个滑块根据它的值改变它的轨道颜色,从绿色到红色。value如果绑定到普通属性,整个事情就完美地工作了(尽管我的渐变还不是很好)@State,但是当你尝试将它附加到它的属性时,@ObservedObject它就会中断,尽管轨道颜色仍然有效,但它永远不会改变基础价值。我想这只是一个错误,但更可能的是这里有一些东西需要修复。
struct RedscaleSlider: UIViewRepresentable {
@Binding var value: Double
var min: Double
var max: Double
class Coordinator: NSObject {
@Binding var value: Double
var min: Double
var max: Double
init(value: Binding<Double>, min: Double = 0, max: Double = 100) {
_value = value
self.min = min
self.max = max
}
@objc func valueChanged(_ sender: UISlider) {
self.value = Double(sender.value)
sender.minimumTrackTintColor = green_to_red_gradient(value: (Double(sender.value) …Run Code Online (Sandbox Code Playgroud) 有人知道如何处理这个问题吗?似乎当您有一个带有 NavigationView 的 UIHostingController 时,会发生以下情况:
注意大的灰色标签栏安全区域。
这主要是一个 UIKit 应用程序。我们正在用 swiftUI 视图替换选项卡栏中的一些选项卡。
这是我的代码:
var body: some View {
NavigationView {
ZStack {
MapKitMapView(
mapView: mapView,
annotations: $annotations,
polylines: $polylines,
centerCoordinate: $centerCoordinate,
newMapRegion: $newMapRegion,
userTrackingMode: $userTrackingMode
)
.edgesIgnoringSafeArea(.all)
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
ButtonLayer(mapView: mapView, userTrackingMode: $userTrackingMode, showSheet: $showSheet)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.padding(.margin)
}
.edgesIgnoringSafeArea(.all)
.navigationBarHidden(true)
.sheet(isPresented: $showSheet) {
SettingsView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
请原谅审查制度。我希望该应用程序保持匿名。
但本质上我的 UITabBar 是按如下方式构建的:
我尝试手动为 UIHostingController …
编辑: 创建了一个示例项目来说明该问题:
https://github.com/Harold-D/PDFView_Representable
问题:
我迷失了,我在 SwiftUI 中对 PDFView 有一个非常简单的 UIViewRepresentable 包装器
import PDFKit
import SwiftUI
struct MyPDFView: UIViewRepresentable {
typealias UIViewType = PDFView
@Binding var pdf: Data
func makeUIView(context _: UIViewRepresentableContext<MyPDFView>) -> UIViewType {
return PDFView()
}
func updateUIView(_ pdfView: UIViewType, context _: UIViewRepresentableContext<MyPDFView>) {
pdfView.document = PDFDocument(data: pdf)
}
}
Run Code Online (Sandbox Code Playgroud)
它正确显示 PDF,但会生成大约 18 条AttributeGraph: cycle detected through attribute消息。
@Binding var pdfStruct: PDFStruct
var body: some View {
MyPDFView(pdf: Binding($pdfStruct.pdf)!)
}
Run Code Online (Sandbox Code Playgroud)
struct PDFStruct {
var pdf: Data?
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 SwiftUI 视图中显示 PDF。
当尝试在这里实施其他解决方案时,我收到错误Missing arguments for parameters 'PDFName', 'DisplayName' in call
我假设您使用 PDFView() 的方式在 iOS 15 中发生了变化;但我似乎找不到任何方法在 SwiftUI 或文档中使用它。
任何帮助将不胜感激。
提前谢谢了!
当前的实施尝试导致上述错误:
import SwiftUI
import PDFKit
struct PDFViewer: View {
var url: URL
var body: some View {
PDFKitRepresentedView(url)
}
}
struct PDFKitRepresentedView: UIViewRepresentable {
let url: URL
init(_ url: URL) {
self.url = url
}
func makeUIView(context: UIViewRepresentableContext<PDFKitRepresentedView>) -> PDFKitRepresentedView.UIViewType {
let pdfView = PDFView()
pdfView.document = PDFDocument(url: self.url)
pdfView.autoScales = true
return pdfView
}
func …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 UIViewRepresentable 实现延迟加载 MyLazyHStack 视图,但它不会延迟加载元素。我在 MyLazyHStack 的内容中使用 LazyHStack,但所有元素都是立即加载,而不是根据需要延迟加载。这是我的代码的一个最小示例。有人可以帮我弄清楚我做错了什么吗?
struct MyLazyHStack<Content: View>: UIViewRepresentable {
var content: Content
func makeUIView(context: Context) -> UIView {
let scrollView = UIScrollView()
scrollView.isPagingEnabled = true
let hostingController = UIHostingController(rootView: content)
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(hostingController.view)
NSLayoutConstraint.activate([
hostingController.view.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
hostingController.view.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
hostingController.view.topAnchor.constraint(equalTo: scrollView.topAnchor),
hostingController.view.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
hostingController.view.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
])
return scrollView
}
func updateUIView(_ uiView: UIView, context: Context) {}
}
struct ContentView: View {
var body: some View {
MyLazyHStack {
LazyHStack {
ForEach(1..<100) { index in
Text("Element \(index)") …Run Code Online (Sandbox Code Playgroud) swiftui ×9
swift ×7
ios ×2
lazy-loading ×1
pdfkit ×1
pdfview ×1
pencilkit ×1
retain-cycle ×1
snapchat ×1
uimenu ×1
uitextview ×1