小编And*_*rew的帖子

当观察到的对象在 SwiftUI 中发生变化时,如何禁用列表中的动画?

视图模型数据更改时如何禁用动画?

我有以下代码:

struct FormView: View {

    @ObservedObject var viewModel: FormViewModel

    var body: some View {
        List {
            ForEach(viewModel.options) { option in
                Text(option.displayValue)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每次视图模型更改时List都会使用动画进行更新。
我怎样才能禁用它?
我尝试添加.animation(nil)但它没有帮助

ios swiftui

18
推荐指数
3
解决办法
6549
查看次数

SwiftUI 2:在新窗口中打开视图的方式

假设我有一个应用程序

var storeVM = BookStoreViewModel(bla1: bla1, bla2: bla2, bla3: bla3)

@SceneBuilder var body: some Scene {
    WindowGroup {
        BookStoreView( model: storeVM )
    }
    
    #if os(macOS)
    Settings {
        SettingsView(model: config)
    }   
    #endif
}
Run Code Online (Sandbox Code Playgroud)

BookStore 有一个 Grid,其中有很多书籍保存在某个 DB 中。

BookView 可以通过以下方式启动:

BookView(model: bookViewModel)
Run Code Online (Sandbox Code Playgroud)

目标:在新的分离窗口中打开 BookView(例如单击按钮)。我怎样才能做到这一点?


奖金问题:如何SettingsView(model: config)从代码中打开?


PS:NavigationLink对我来说不是解决方案,因为我没有使用NavigationView.

navigation macos scene swift swiftui

14
推荐指数
2
解决办法
1878
查看次数

了解 SwiftUI 2 中的场景/窗口组?

SwiftUI 2 中有几个对象,比如SceneWindowGroup作为某种场景。

在阅读文档并查看与场景相关的 WWDC2020 视频后,我通过以下方式查看层次结构:

单个应用程序 => 一个或多个场景 => 视图层次结构(或几个)

每个场景都包含一个视图层次结构的根视图,并有一个由系统管理的生命周期。每个场景可以以不同的方式显示取决于平台。

  1. 如果 WindowGroup 场景的孩子很少 - 它如何选择显示它们的方式?(垂直/水平)?以及如何手动控制?

我不确定这是用 HStack 和 VStack 控制的,因为在我的测试项目中,由于某种原因,我得到了不同的结果。

  1. 我如何控制场景显示?作为示例应用程序有 2 个场景 - 每个 WindowGroup 中有 2 个视图。如何在 macOS 的同一窗口中从一个场景切换到另一个场景?

  2. 如何使用 SwiftUI 在新窗口中打开第二个场景?

  3. 为什么我们需要WindowGroup?不就是一组视图吗?

  4. 一般如何与他们合作?

或者我可以阅读比文档或WWDC 1 分钟视频(从 2.00 到 3.05)中写的更多的细节,因为没有足够的信息来理解该主题。

macos scene swift swiftui windowgroup

13
推荐指数
1
解决办法
3101
查看次数

SwiftUI:是否存在修饰符来突出显示 Text() 视图的子字符串?

我在屏幕上有一些文字:

Text("someText1")
Run Code Online (Sandbox Code Playgroud)

是否可以在不创建大量文本项目的情况下突出显示/选择部分文本

我的意思是

Text("som") + Text("eTex").foregroundColor(.red) + Text("t1")
Run Code Online (Sandbox Code Playgroud)

不是我的解决方案

最好有某种修饰符以某种方式突出显示文本的一部分。类似于:

Text("someText1").modifier(.highlight(text:"eTex"))
Run Code Online (Sandbox Code Playgroud)

是否可以?(我的意思是没有创造很多观点)

swift swiftui

10
推荐指数
3
解决办法
3877
查看次数

SwiftUI:如何在悬停时显示工具提示/提示?

如何在某些视图上显示工具提示/提示?例如,在按钮上。

在此处输入图片说明

tooltip swiftui

9
推荐指数
3
解决办法
4200
查看次数

SwiftUI:ListItem 手势

Target 是具有以下行为的修改:

在此处输入图片说明

(但只有 2 个按钮 - 左侧 1 个,右侧 1 个)

行为:

  • 短滑显示按钮并让用户能够点击它。

  • 强长滑动按下按钮。

  • 能够使用 2 指手势


最小可重现示例:

import SwiftUI

public extension View {
    func SwiperizeItem(closureL: @escaping () -> (), closureR: @escaping () -> ()) -> some View
    {
        self.modifier( SwiperizeItemModifier(closureL: closureL, closureR: closureR) )
    }
}

struct SwiperizeItemModifier: ViewModifier {
    @State var dragOffset = CGSize.zero
    
    @State var offset1Shown = CGSize(width: 100, height: 0)
    @State var offset1Click = CGSize(width: 250, height: 0)
    
    @State var offset2Shown = CGSize(width: -100, height: 0) …
Run Code Online (Sandbox Code Playgroud)

macos swift swiftui

9
推荐指数
2
解决办法
1711
查看次数

SwiftUI:是否可以使用 ForEach + ContextMenu + if 语句?

(仅在 macOS 上尝试过,但我相信 iOS 上也有相同的行为)

macOS 10.15.2 (19C57);Xcode:11.3 (11C29)

(问题已更新,因为我在问题中发现了新的关系)

我有以下代码:

List(model.filteredStatus) { status in
    StatusViewRow(status: status, model: self.model)
        .contextMenu{
            Text("menu 1")
            Text("menu 2")
        }
}
Run Code Online (Sandbox Code Playgroud)

它运行完美。

但如果我想使用 ForEach 代替(无论为什么):

ForEach(model.filteredStatus) { status in
    StatusViewRow(status: status, model: self.model)
        .contextMenu{
            Text("menu 1")
            Text("menu 2")
        }
}
Run Code Online (Sandbox Code Playgroud)

不出现上下文菜单。

我已经找到原因了。ForEach原因是++contextMenu语句组合工作不正确if

ContextMenu 不适用于语句内的行的一部分if。当我使用 时,在整行上运行良好,并且List仅在 Toogle 行部分上运行ForEach

有人可以解释为什么会这样吗?

我在 contextMenuif内有一个声明StatusViewRow没有出现在这部分:

struct StatusViewRow : View {
    @ObservedObject var status : …
Run Code Online (Sandbox Code Playgroud)

macos ios swiftui

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

SwiftUI:如何删除 Text() 周围的间距?

例如我有 3 个属性:

var path1FilePath:String = "Src/"
var path2FileName: String = "filename"
var path3Extension: String = ".jpg"
Run Code Online (Sandbox Code Playgroud)

我需要用以下方式显示它们:

HStack {
    Text(status.path1FilePath)
    Text(status.path2FileName).bold()
    Text(status.path3Extension)
}
Run Code Online (Sandbox Code Playgroud)

问题是Text()视图之间的间距。如何去除它们?

在此输入图像描述

swiftui

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

如何使用 SwiftUI 应用“acceptsFirstMouse”来构建应用程序?

假设我有一个适用于 macOS (Catalina) 的应用程序。

这个应用程序没有隐藏。但另一个应用程序被激活(最前面/最上面)

我想捕获按钮/任何其他视图的点击(我使用的是 swiftUI,所以一切都是视图),以防点击我的应用程序。

我怎样才能做到这一点?


UPD:如何使用 SwiftUI 应用“acceptsFirstMouse”来构建应用程序?

macos swift swiftui macos-catalina

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

CefSharp网页元素点击

我正在尝试对某些页面元素(如 btn 或链接)进行简单的点击。

我编写了 2 个通过 xpath 和 CSS 选择器单击的函数。

这两个功能在浏览器的开发者控制台中都可以完美运行,但在 CEF 中部分不起作用。

  • 代码完美地点击来自开发者控制台和 Cef 的简单链接
  • 代码完美地点击了来自开发者控制台的确切按钮,但不会从 CEF 中点击。出于某种原因,它只是忽略它......

怎么会这样?js代码完全一样!...

    public void Click(string xpath)
    {
        var js = "document.evaluate(\"" + xpath + "\", document, null, XPathResult.ANY_TYPE, null).iterateNext().click();";

        EvaluateJavascript(js);
    }

    public void ClickCss(string css)
    {
        var js = "document.querySelector('"+ css + "').click()";

        EvaluateJavascript(js);
    }


    public async Task EvaluateJavascript(string script)
    {
        JavascriptResponse javascriptResponse = await Browser.GetMainFrame().EvaluateScriptAsync(script);

        if (!javascriptResponse.Success)
        {
            throw new JavascriptException(javascriptResponse.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

细节: 在此处输入图片说明

在此处输入图片说明

使用的点击代码:

_browser.ClickCss("#upload-container a");
Run Code Online (Sandbox Code Playgroud)

再一次:相同的 js 代码在浏览器开发控制台中完美运行,但由于某种原因在 CEF …

c# click cefsharp

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

swiftui ×9

macos ×5

swift ×5

ios ×2

scene ×2

c# ×1

cefsharp ×1

click ×1

macos-catalina ×1

navigation ×1

tooltip ×1

windowgroup ×1