标签: nsviewrepresentable

如何在 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 2.0 无法使用 NSViewRepresentable 从 NSWindow 上的 styleMask 中删除 .titled

我正在为 SwiftUI 2.0 重新设计我的应用程序,但在复制我可以使用 AppDelegate 执行的操作时遇到了问题。

我正在使用 NSViewRepresentable 来访问 NSWindow,这样我就可以删除窗口的标题栏(我知道它不在指南中,但永远不会提交)。.titled从 中删除时styleMask,应用程序崩溃。

struct WindowAccessor: NSViewRepresentable {
    @Binding var window: NSWindow?
    
    func makeNSView(context: Context) -> NSView {
        let view = NSView()
        DispatchQueue.main.async {
            self.window = view.window
            self.window?.isOpaque = false
            self.window?.titlebarAppearsTransparent = true
            self.window?.backgroundColor = NSColor.clear
            self.window?.styleMask = [.fullSizeContentView]
            self.window?.isMovableByWindowBackground = true
            self.window?.backingType = .buffered
        }
        return view
    }
    
    func updateNSView(_ nsView: NSView, context: Context) {}
}

@main
struct MyApp_App: App {
    @State private var window: NSWindow?
    var body: …
Run Code Online (Sandbox Code Playgroud)

macos nswindow swiftui nsviewrepresentable

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

SwiftUI 中的 WKWebView 未在 macOS 上加载 HTML 字符串

关于 StackOverflow 的第一个问题(对于针对 macOS 的本机应用程序开发者来说相对较新)。

我目前正在尝试构建一个简单的 SwiftUI 视图,它利用 WKWebView 的 loadHTMLString 函数在屏幕上显示硬编码的 HTML 字符串。

AFAIK webkit 目前不支持 SwiftUI,因此我需要使用NSViewRepresentable在我的 SwiftUI 应用程序中嵌入 AppKit UI 。到目前为止,我根据文档和 XCode 的自动完成功能获得了以下信息:

import SwiftUI
import WebKit

struct HTMLView: NSViewRepresentable {
    typealias NSViewType = WKWebView
    
    let html = "<h1>Hello wordl</h1>"

    func makeNSView(context: Context) -> WKWebView {
        let webview = WKWebView()
        return webview
    }
    
    func updateNSView(_ nsView: WKWebView, context: Context) {
        nsView.loadHTMLString(html, baseURL: nil)
    }
}

struct HTMLView_Previews: PreviewProvider {
    static var previews: some View {
        HTMLView() …
Run Code Online (Sandbox Code Playgroud)

webkit wkwebview swiftui nsviewrepresentable

4
推荐指数
1
解决办法
1216
查看次数

How to auto-expand height of NSTextView in SwiftUI?

How do I properly implement NSView constraints on the NSTextView below so it interacts with SwiftUI .frame()?

Goal

An NSTextView that, upon new lines, expands its frame vertically to force a SwiftUI parent view to render again (i.e., expand a background panel that's under the text + push down other content in VStack). The parent view is already wrapped in a ScrollView. Since the SwiftUI TextEditor is ugly and under-featured, I'm guessing several others new to MacOS will wonder how …

macos nstextview swiftui nsviewrepresentable

4
推荐指数
1
解决办法
4190
查看次数