小编len*_*nny的帖子

SwiftUI - 在嵌套视图上使用不同的转换

如何在 SwiftUI 中拥有一个覆盖视图,并在不同部分具有不同的过渡?例如,在我的具体示例中,我想实现以下目标:

  • 覆盖视图的一个子视图从底部滑入
  • 覆盖视图的另一个子视图根本没有过渡(立即出现)
  • 叠加层的背景不是从底部滑入而是淡入

我已经尝试过各种各样的事情,看来我必须在包装条件的视图上设置动画和过渡if showOverlay。但是,看起来覆盖层子视图上设置的所有.transition()和修饰符都被忽略了。.animation()

实际上可能吗?以下代码是我认为应该可以工作但显然根本不起作用的代码:

// any observable external variable, that enables / disables the overlay
@State showOverlay: bool = false

// surrounding view
VStack { /* .. */ }
  .frame(maxWidth: .infinity, maxHeight: .infinity)
  .overlay(
    Group {
      if showOverlay {
        Overlay()
      }
    }
  )

// overlay view
struct Overlay: View {
  var body: some View {
     VStack {
        // style 1
        Text("OverlayContent that slides in from bottom")
           .transition(.move(edge: .bottom).combined(with: .opacity))
           .animation(.easeInOut(duration: …
Run Code Online (Sandbox Code Playgroud)

transition ios swiftui

11
推荐指数
0
解决办法
876
查看次数

列表上的 SwiftUI EditButton 在 iOS 15 中停止工作

我将 SwiftUI EditButton() 与 List() 一起使用,但它突然停止与 iOS15 一起使用。虽然我不使用包装式 NavigationView,但是它以前工作得很好。无论如何,使用 NavigationView 对我来说不是一个选择。

\n
struct Test: View {\n    @State private var items: [String] = ["Item1", "Item2", "Item3"] // mock / demo\n    \n    var body: some View {\n        VTile(padding: 0) {\n            HStack {\n                Text("Title")\n                Spacer()\n            }\n            .overlay(EditButton())\n            \n            List {\n                ForEach(items, id: \\.self) { item in\n                    HStack {\n                        Text(item)\n                        Spacer()\n                    }\n                }\n                .onDelete(perform: delete)\n                .onMove(perform: move)\n            }\n            .listStyle(PlainListStyle())\n        }\n    }\n    \n    func move(from source: IndexSet, to destination: Int) {\n        // ...\n    }\n    \n …
Run Code Online (Sandbox Code Playgroud)

listview swift swiftui ios15

8
推荐指数
0
解决办法
1158
查看次数

amountType(forIdentifier:) 在 iOS 的未来版本中已弃用?

Xcode(我使用的是 v13.1)警告我,这quantityType(forIdentifier:)将在 iOS 的未来版本中被弃用。

在此输入图像描述

因此,我检查了苹果的开发人员文档,以获取还可以使用什么的提示。令人惊讶的是,在文档中它并没有被标记为在不久的将来已弃用。

在这种情况下应该相信哪个消息来源?如果quantityType(forIdentifier:)将来确实要删除,是否已经有已知的替代品?

deprecated deprecation-warning swift healthkit apple-documentation

8
推荐指数
1
解决办法
967
查看次数

均匀对齐 swiftUI 堆栈中的项目

swiftUI Stack 中的项目如何均匀对齐以填满所有可用空间?第一个和最后一个项目应该直接位于父级堆栈框架的开头/结尾,如下所示:

在此输入图像描述

对于熟悉 css 的人来说,所需的行为等于 css3 property display: flex; justify-content: space-between;

alignment swift5 swiftui

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

SwiftUI 组合:嵌套观察对象

让 swiftUI 仍然基于嵌套观察对象进行更新的最佳方法是什么?

以下示例显示了我对嵌套观察对象的含义。球管理器的 balls 数组是一个已发布的属性,其中包含可观察对象的数组,每个对象本身都有一个已发布的属性(颜色字符串)。

不幸的是,当点击其中一个球时,它不会更新球的名称,也不会收到更新。那么我可能搞砸了在这种情况下联合收割机是如何工作的?

import SwiftUI

class Ball: Identifiable, ObservableObject {
    let id: UUID
    @Published var color: String
    init(ofColor color: String) {
        self.id = UUID()
       self.color = color
    }
}

class BallManager: ObservableObject {
    @Published var balls: [Ball]
    init() {
        self.balls = []
    }
}

struct Arena: View {
   @StateObject var bm = BallManager()

    var body: some View {
        VStack(spacing: 20) {
            ForEach(bm.balls) { ball in
                Text(ball.color)
                    .onTapGesture {
                        changeBall(ball)
                    }
            }
        }
        .onAppear(perform: createBalls)
        .onReceive(bm.$balls, perform: …
Run Code Online (Sandbox Code Playgroud)

swift swiftui combine observableobject

6
推荐指数
2
解决办法
2662
查看次数

移动时 SwiftUI 视图会大量重新渲染,导致卡顿

处理 SwiftUI 的最佳方法是重新渲染使用DragGesture.offset()修饰符移动的整个视图:MyView().offset(x: drag.translation.width)

一旦MyView()是一个非常大的视图,包含大量复杂的子视图,拖动开始变得越来越不平滑,这显然是因为 SwiftUI 每次移动时都会重新渲染整个视图,这也会导致所有后代视图将被重绘等等。

.offset()移动大视图时使用修改器不可行吗?有没有其他方法?到目前为止,使用此处描述的 DragGewture 和偏移修改器(或在某些情况下为位置)似乎是常见的方法。

swift swiftui draggesture

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

在菜单中使用 NavigationLink (SwiftUI)

您可以在 swiftUI 中将aNavigationLink用作 aMenu的项目吗?

它似乎什么都不做:

Menu {
   NavigationLink(destination: Text("test1")) {
       Text("item1")
   }
   NavigationLink(destination: Text("test2")) {
       Text("item2")
   }
} label: {
   Text("open menu")
}
Run Code Online (Sandbox Code Playgroud)

如果它不能像上面尝试的那样工作,是否有其他方法可以实现预期的结果?

swift swiftui swiftui-navigationlink

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

SwiftUI withAnimation 导致意外行为

我注意到 XCode 使用 swiftUI 的奇怪行为withAnimation{}

我创建了以下工作示例:

import SwiftUI

class Block: Hashable, Identifiable {
    // Note: this needs to be a class rather than a struct
    
    var id = UUID()
    
    static func == (lhs: Block, rhs: Block) -> Bool {
        lhs.id == rhs.id
    }
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(self.id)
    }
}

struct ContentView: View {
    @State private var blocks: [Block]
    
    init() {
        var blocks = [Block]()
        
        /// generate some blocks here
        blocks.append(Block())
        blocks.append(Block())
        blocks.append(Block())
        
        self._blocks = State(initialValue: …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui

3
推荐指数
1
解决办法
1813
查看次数

在 iOS userInfo 上使用 Swift 的 Decodable

iOS 从后台通知返回 json 数据,类型为[AnyHashable : Any]. 有什么方法可以将其解析为实现 Codable 协议的结构吗?

例子 :

// Server sends the following data via apn
{"items": [{"id": "192e7926-7891-44eb-8ca7-f795d8552e84", "text": "some text", "num": 0.7}]}
Run Code Online (Sandbox Code Playgroud)

eapp端接收数据时

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
   print(userInfo["items"])
}
Run Code Online (Sandbox Code Playgroud)

print 语句给出以下输出

Optional(<__NSSingleObjectArrayI 0x283fe80b0>(
  {
    id = "192e7926-7891-44eb-8ca7-f795d8552e84";
    num = "0.7";
    text = "Check test";
  }
))
Run Code Online (Sandbox Code Playgroud)

我已经有一个匹配的可编码结构:

struct Item: Codable {
    let id: UUID
    let text: String
    let num: Double
} …
Run Code Online (Sandbox Code Playgroud)

apple-push-notifications swift codable decodable

3
推荐指数
1
解决办法
2338
查看次数