标签: uiviewrepresentable

SwiftUI - State change in UITextField causes the frameWidth to grow uncontrolled and ignore bounds/frame

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)

uitextfield uikit swift swiftui uiviewrepresentable

19
推荐指数
1
解决办法
1370
查看次数

SKView 警告日志

运行我的 SwiftUI 和 SpriteKit 应用程序时,我在日志中收到以下消息:

2019-11-18 21:58:57.631912+0000 PixelBattles[2812:1215803]

SKView:ignoreRenderSyncInLayoutSubviews 为否。在没有处理程序的情况下调用 _renderSynchronouslyForTime

收到此日志我做错了什么,我应该担心吗?这可能是一个错误吗?

难道 SwiftUI 无法弄清楚如何为 进行布局SKView

主要编辑:

如果需要代码,可以在之前的编辑中看到。下面我说明为什么我认为它不再相关。

我已向 Apple 发送了一些反馈 ( FB7456217)。我已经删除了代码,因为我不再怀疑这是我的代码的问题。我创建了一个空白的游戏项目,没有 SwiftUI,但仍然立即得到相同的警告日志。

所以即使使用默认的项目模板,设备和模拟器的日志仍然出现。如果我得到有用的回应,我会更新这个问题。


我仍然没有收到任何回音 - 自从我半个月前发布此消息以来,有没有人得到任何新信息?我仍然有这些警告!

sprite-kit swift swiftui uiviewrepresentable

15
推荐指数
1
解决办法
2734
查看次数

使用 SwiftUI 实现 Apple Pay

这是我第一次在一个大项目中使用 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)

ios passkit applepay swiftui uiviewrepresentable

10
推荐指数
1
解决办法
2587
查看次数

SwiftUI View 在嵌入 UIView 时不会更新其状态(使用 UIHostingController)

我想通过传递 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)

uiview ios swift swiftui uiviewrepresentable

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

对 ObservedObject 的更改不会更新 UIViewRepresentable

下面是最简单的例子。在预览中工作正常(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 uiviewrepresentable

7
推荐指数
1
解决办法
1235
查看次数

如何在 SwiftUI 列表中以正确的高度渲染多行文本?

我想要一个显示多行文本的 SwiftUI 视图,具有以下要求:

  • 适用于 macOS 和 iOS。
  • 显示大量字符串(每个字符串由一个单独的模型对象支持)。
  • 我可以对多行​​文本进行任意样式设置。
  • 每个文本字符串可以是任意长度,可能跨越多个行和段落。
  • 每个文本字符串的最大宽度固定为容器的宽度。高度根据文本的实际长度而变化。
  • 没有滚动每个单独的文本,只有列表。
  • 文本中的链接必须是可点击/可点击的。
  • 文本是只读的,不必是可编辑的。

感觉最合适的解决方案是拥有一个列表视图,包装原生 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

7
推荐指数
1
解决办法
3054
查看次数

SwiftUI - WKWebView 的 iOS 13 UIViewRepresentable 获取线程 1:EXC_BREAKPOINT 崩溃

我正在尝试将 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 和 …

ios swift wkwebview swiftui uiviewrepresentable

7
推荐指数
1
解决办法
1511
查看次数

UIImageView 可表示未调整大小

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 uiviewrepresentable

7
推荐指数
1
解决办法
1137
查看次数

如何在 SwiftUI 中获取 UITextView 的动态高度

我非常接近在 SwiftUI 中实现 UITextView 的动态高度。请帮我解决这些问题:

  1. UITextView 在出现时具有正确的高度,但在执行编辑时不会调整高度;我希望它能调整一下。
  2. 每次我在 TextView 中编辑文本时,我都会在控制台中收到此消息:[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 uiviewrepresentable

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

如何以编程方式从 UIViewRepresentable 触发 UIMenu

我尝试创建一个自定义 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)

swift swiftui uiviewrepresentable uimenu

6
推荐指数
0
解决办法
2134
查看次数