小编ray*_*eja的帖子

如何限制 SwiftUI 中文本的宽度

我试图制作一个像这样的对话气泡:

Text("Hello my name is Johnny Miller and I am new here")
    .foregroundColor(.white)
    .padding()
    .background(.blue)
    .cornerRadius(25)
Run Code Online (Sandbox Code Playgroud)

然而我认为讲话泡泡看起来比实际需要的要宽得多。因此,我试图限制气泡在到达新线之前可以延伸多远。我想到的最简单的方法是:

Text("Hello my name is Johnny Miller and I am new here")
    .foregroundColor(.white)
    .padding()
    .background(.blue)
    .cornerRadius(25)
    .frame(maxWidth: 300)  // << Limits how wide it can stretch
Run Code Online (Sandbox Code Playgroud)

这适用于长消息,但当文本较小(例如“Hello”)时,框架将保持在 300 磅,并且拒绝将大小调整到理想宽度。

帧保持在300pts

我尝试使用.fixedSize(),但这会导致文本很长时被截断。

我找不到一种方法来限制文本的宽度并仍然保持其理想的大小。如果有人能提出解决方案,我将不胜感激。

简而言之:文本框架的宽度不应超过 300pts,但可以任意高。

提前致谢!

编辑

这些是我到目前为止尝试过的事情:

Text("Hello")
    .foregroundColor(.white)
    .padding()
    .background(.blue)
    .cornerRadius(25)
    .frame(maxWidth: 300)
    .lineLimit(nil)
Run Code Online (Sandbox Code Playgroud)

这会导致“Hello”气泡的帧为 300(我在上面提供了图像)

我尝试过:

Text("Hello my name is Johnny Miller and I am new here")
    .foregroundColor(.white)
    .padding()
    .background(.blue)
    .cornerRadius(25) …
Run Code Online (Sandbox Code Playgroud)

layout frame ios swift swiftui

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

有什么方法可以在 SwiftUI 中使用 @ViewBuilder 创建/提取视图数组

我正在尝试创建一个简单的struct,它接受一组视图并返回一个VStack包含这些视图的普通视图,除了它们都是对角堆叠的。

代码:

struct LeaningTower<Content: View>: View {
    var views: [Content]
    var body: some View {
        VStack {
            ForEach(0..<views.count) { index in
                self.views[index]
                    .offset(x: CGFloat(index * 30))
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这很好用,但每当我不得不调用它时,我总是很生气:

LeaningTower(views: [Text("Something 1"), Text("Something 2"), Text("Something 3")])
Run Code Online (Sandbox Code Playgroud)

在这样的数组中列出视图对我来说似乎非常奇怪,所以我想知道是否有一种方法可以像这样@ViewBuilder调用我的LeaningTower结构:

LeaningTower {  // Same way how you would create a regular VStack
    Text("Something 1")
    Text("Something 2")
    Text("Something 3")
    // And then have all of these Text's in my 'views' array
}
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以@ViewBuilder …

arrays ios swift swiftui viewbuilder

7
推荐指数
3
解决办法
1432
查看次数

SwiftUI 中的 animatableData 是做什么的?

我正在研究animatableData我制作的自定义形状的属性,但我无法真正想象它的作用以及系统在哪里使用它。

我不明白系统如何知道animatableData当状态发生变化时应该插入哪些属性。我也不明白这get部分属性animatableData是被系统用来做什么的。我唯一理解的是,当变量发生更改时,SwiftUI 会将animatableData属性更新为原始值和最终值之间的所有中间值。@State

animatableData如果有人可以给出系统使用的非常详细的事件顺序,我将非常感激。尽可能详细,因为我是那种即使不理解 1% 的东西也会感到潦草的人之一(但是如果我确实有任何问题,我会在评论中问你)。

提前致谢!

PS 我尝试在 getter 中返回一个常量,animatableData但我的动画仍然完美运行,这让我更加困惑。如果可以的话请告诉我吸气剂的用途。

animation core-animation ios swift swiftui

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

使用 Swift 创建 Gameboy 游戏

我正在考虑使用 SpriteKit 为 iOS 创建一款复古风格的游戏,我想知道是否有任何方法可以在 Gameboy Advance 上运行它。

根据我的观察,Gameboys 可以运行任何用任何编程语言编写的游戏,只要它“编译为 ARM 汇编”。我检查了 Swift 是否编译为 ARM 程序集,其中提到了 Swift 编译为本机代码(即程序集)。这是否意味着可以在实际的 Gameboy 上运行复古风格的 iOS 游戏(请记住艺术品所需的分辨率以及其他此类限制)?

如果我有什么方法可以为 iOS 创建游戏,但同时也可以在 Gameboy Advance 上运行,请告诉我。

ios gameboy sprite-kit swift

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

任务在 Swift 中创建后并未立即运行

在苹果文档中,它说

\n
\n

任务创建后可以立即开始运行;您不\xe2\x80\x99t显式启动或安排它们。

\n
\n

但是,在我的代码中,任务仅在调用它的函数超出范围时才开始运行。

\n
func test() {\n    Task {\n        print("in task")\n    }\n    for _ in 0 ..< 10_000_000 { }\n    print("done counting")\n}\n
Run Code Online (Sandbox Code Playgroud)\n

此代码在执行时会挂起/等待一定时间,然后始终打印:
\n done counting
\nin task

\n

我预计它会打印
\n in task
\ndone counting

\n

有人可以解释一下我在苹果文档中遗漏了什么吗?

\n

concurrency task ios swift

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

如何让SpriteView显示物理或节点数

当我尝试在场景的函数中设置该showPhysics属性时,当我在 SwiftUI 中使用 SpriteView 呈现它时,它不会执行任何操作。当我尝试显示 FPS 和节点数时,也会发生同样的情况。这是代码:truedidMove(to:)

class GameScene: SKScene {
    override func didMove(to view: SKView) {
        view.showsFPS = true
        size = view.frame.size
        
        addChild(SKSpriteNode(color: .yellow, size: CGSizeMake(50, 50)))
    }
}

struct ContentView: View {
    var body: some View {
        VStack {
            Text("My Game")
            SpriteView(scene: GameScene())
        }
        .padding()
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我使用 SpriteView 错误?

ios sprite-kit swift swiftui spriteview

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

如何在 Swift 中向 Data 实例添加描述

我想为我的Data实例添加描述,以便我知道它们的用途。
例如:“此数据用于 (user.name) 的个人资料图片”或“此数据是编码的用户实例”等。

我正在浏览Data实例可用的属性,看到有一个descriptionanddebugDescription属性。我试图为这些属性设置值,但似乎我不能,因为它们是 get-only 属性。有没有其他方法可以向Data实例添加描述?

编辑:Data按照下面的建议 包装实例是一个很好的解决方案,但如果有一种方法可以在不使用包装器的情况下实现相同的效果,请告诉我。

ios swift

-2
推荐指数
1
解决办法
79
查看次数