I am using SwiftUI and bridge to UITextField (I need to assign firstResponder). I use the code from here: SwiftUI: How to make TextField become first responder?
The following code updates my @Binding var. This of course is intended behavior. The problem is that this causes the textField to ignore the frame/ bounds. It just expands and pushes other elements out of the view. Other parts of the view are also reliant on the @State.
func textFieldDidChangeSelection(_ textField: UITextField) { …Run Code Online (Sandbox Code Playgroud) 运行我的 SwiftUI 和 SpriteKit 应用程序时,我在日志中收到以下消息:
2019-11-18 21:58:57.631912+0000 PixelBattles[2812:1215803]
SKView:ignoreRenderSyncInLayoutSubviews 为否。在没有处理程序的情况下调用 _renderSynchronouslyForTime
收到此日志我做错了什么,我应该担心吗?这可能是一个错误吗?
难道 SwiftUI 无法弄清楚如何为 进行布局SKView?
如果需要代码,可以在之前的编辑中看到。下面我说明为什么我认为它不再相关。
我已向 Apple 发送了一些反馈 ( FB7456217)。我已经删除了代码,因为我不再怀疑这是我的代码的问题。我创建了一个空白的游戏项目,没有 SwiftUI,但仍然立即得到相同的警告日志。
所以即使使用默认的项目模板,设备和模拟器的日志仍然出现。如果我得到有用的回应,我会更新这个问题。
我仍然没有收到任何回音 - 自从我半个月前发布此消息以来,有没有人得到任何新信息?我仍然有这些警告!
这是我第一次在一个大项目中使用 PassKit 和 SwiftUI。我正在尝试实现 Apple Pay SwiftUI,并且由于还没有本地方式来实现,因此我尝试将 PKPaymentAuthorizationViewController 包装在 UIViewControllerRepresentable 中,但我不确定我是否正确执行此操作。
该视图显示正确,并且在单击它付款时似乎可以正常工作。我通过将视图绑定到 isPresentingApplePay bool 来控制显示窗口(见下文)。应该关闭窗口时会发生问题。点击cancel按钮不会关闭视图;有时它甚至不调用 paymentAuthorizationViewControllerDidFinish 委托函数。提交付款后也会发生同样的事情。有时会调用 didFinish 委托,但不会取消视图。我尝试传递绑定变量 isPresentingApplePay 并将其从 didFinish设置为false但它没有做任何事情。让视图消失的唯一方法是点击苹果支付窗口外的任何部分。
有谁知道我做错了什么?有什么我完全想念的吗?
通过将视图绑定到 if statement
这是我的 PKPaymentAuthorizationViewController 包装器:
import Foundation
import PassKit
import SwiftUI
struct ApplePayController: UIViewControllerRepresentable {
@Environment(\.presentationMode) var presentationMode
@EnvironmentObject var userData: UserData
@Binding var purchase: Purchase
@Binding var isPresenting: Bool
let items: [PKPaymentSummaryItem]
func updateUIViewController(_ uiViewController: PKPaymentAuthorizationViewController, context: Context) {
}
typealias UIViewControllerType = PKPaymentAuthorizationViewController
func makeUIViewController(context: Context) …Run Code Online (Sandbox Code Playgroud) 我想通过传递 SwiftUI 来使用 SwiftUI 视图作为子 UIView(在我的应用程序中将在 UIViewController 中)的内容。然而,一旦嵌入到 UIView 中,SwiftUI 视图就不会响应状态更改。
我在下面创建了有问题的代码的简化版本。当点击嵌入在 EmbedSwiftUIView 中的文本视图时,顶部 VStack 的外部文本视图会按预期更新,但嵌入在 EmbedSwiftUIView 中的文本视图不会更新其状态。
struct ProblemView: View {
@State var count = 0
var body: some View {
VStack {
Text("Count is: \(self.count)")
EmbedSwiftUIView {
Text("Tap to increase count: \(self.count)")
.onTapGesture {
self.count = self.count + 1
}
}
}
}
}
struct EmbedSwiftUIView<Content:View> : UIViewRepresentable {
var content: () -> Content
func makeUIView(context: UIViewRepresentableContext<EmbedSwiftUIView<Content>>) -> UIView {
let host = UIHostingController(rootView: content())
return host.view
} …Run Code Online (Sandbox Code Playgroud) 下面是最简单的例子。在预览中工作正常(UITextView文本更新为“哎哟”)。但是,在一个应用程序中运行它(即添加为rootView通过sceneDelegate),以及UITextView不更新。
import SwiftUI
class ModelObject : ObservableObject{
@Published var text = "Model Text"
}
struct MyTextView : UIViewRepresentable {
@ObservedObject var modelObject : ModelObject
func makeUIView(context: Context) -> UITextView {
let result = UITextView()
result.isEditable = true
return result
}
func updateUIView(_ view: UITextView, context: Context) {
view.text = modelObject.text
}
}
struct BugDemoView : View{
@ObservedObject var modelObject : ModelObject
var body : some View{
VStack{
MyTextView(modelObject: modelObject)
Button(action: {
self.modelObject.text …Run Code Online (Sandbox Code Playgroud) 我想要一个显示多行文本的 SwiftUI 视图,具有以下要求:
感觉最合适的解决方案是拥有一个列表视图,包装原生 UITextView/NSTextView。
这是我到目前为止所拥有的。它实现了大多数要求,除了具有正确的行高度。
//
// ListWithNativeTexts.swift
// SUIToy
//
// Created by Jaanus Kase on 03.05.2020.
// Copyright © 2020 Jaanus Kase. All rights reserved.
//
import SwiftUI
let number = 20
struct ListWithNativeTexts: View {
var body: some View {
List(texts(count: number), id: \.self) { text in
NativeTextView(string: text)
}
}
}
struct ListWithNativeTexts_Previews: PreviewProvider {
static var previews: some View {
ListWithNativeTexts()
}
} …Run Code Online (Sandbox Code Playgroud) swiftui swiftui-list uiviewrepresentable nsviewrepresentable
我正在尝试将 WKWebView 移植到 SwiftUI。这是我的代码:
import SwiftUI
import WebKit
struct ContentView: View {
var body: some View {
WebViewWrapper()
}
}
/**
WKWebView ported over to SwiftUI with `UIViewRepresentable`.
*/
final class WebViewWrapper: UIViewRepresentable {
/// `UIViewRepresentable` required function #1.
func makeUIView(context: Context) -> WKWebView {
print("make")
let webView = WKWebView() /// EXC_BREAKPOINT error here
return webView
}
/// `UIViewRepresentable` required function #2
func updateUIView(_ uiView: WKWebView, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
就是这样。我创建了一个新的 SwiftUI 项目并将其粘贴进去。但是,我收到此错误:
线程 1:EXC_BREAKPOINT(代码=EXC_I386_BPT,子代码=0x0)
...在控制台中没有打印任何内容。这发生在 iOS 13.0 和 …
I can't find a way to make a UIImageView wrapped in a UIViewRepresentable be sized to fit the frame. It always resizes beyond the screen no matter what content Mode or clipping or explcit framing I do. (The image dimensions are much larger than the device screen frame)
To clarify: I need to use UIImageView due to some subview positioning I have to do down the line and various other reasons.
Here's a paired down example:
struct ImageView: UIViewRepresentable { …Run Code Online (Sandbox Code Playgroud) 我非常接近在 SwiftUI 中实现 UITextView 的动态高度。请帮我解决这些问题:
[SwiftUI] Modifying state during view update, this will cause undefined behavior.这是我的代码:
项目编辑视图
TextView(text: $notes, textViewHeight: $textViewHeight)
.frame(height: self.textViewHeight)
Run Code Online (Sandbox Code Playgroud)
UI文本视图
import SwiftUI
struct TextView: UIViewRepresentable {
@Binding var text: String
@Binding var textViewHeight: CGFloat
func makeUIView(context: Context) -> UITextView {
let textView = UITextView()
textView.delegate = context.coordinator
textView.font = .systemFont(ofSize: 17)
textView.backgroundColor = .clear
return textView
}
func updateUIView(_ textView: UITextView, context: Context) {
textView.text = text
}
class Coordinator: …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) swiftui ×10
swift ×5
ios ×3
applepay ×1
passkit ×1
sprite-kit ×1
swiftui-list ×1
uikit ×1
uimenu ×1
uitextfield ×1
uiview ×1
wkwebview ×1