有人可以帮我理解 viewDidLoad() 到底是做什么的吗?我知道它在视图控制器第一次加载到内存时被调用。另外,我知道我可以将其视为 main()。但我想了解更多。它也参考了什么?界面视图?它加载并处理所有按钮、标签等?有一个详细且解释清楚的概述会有所帮助!
此外,我也对覆盖感到困惑。它是否向现有的 viewDidLoad() 添加代码?
谢谢!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
Run Code Online (Sandbox Code Playgroud)
PS 我是新来的,请随时对我的问题格式发表任何评论。
我ScrollView在 a 之上有一个 a Button,因为我希望滚动时将 a 的内容ScrollView移动到按钮的顶部。然而,目前这意味着该按钮不起作用,我认为是因为滚动视图正在获取触摸事件。有什么方法可以让按钮在 SwiftUI 中工作吗?
struct Test: View {
@State var pressed:Bool = false
var body: some View {
ZStack {
VStack {
Button(action: {
self.pressed = true
}) {
Text("Button")
.padding(20)
.accentColor(pressed ? Color.green : Color.red)
}
Spacer()
}
ScrollView {
Spacer()
.frame(height:60)
Color.gray
.frame(height:200)
.padding(10)
Color.gray
.frame(height:200)
.padding(10)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用私有仓库创建了一个 Swift 包管理器。xcframework zip 文件位于此私有存储库中。设置的 swift 包管理器位于公共存储库中。当我尝试在示例应用程序中集成此 SPM(swift 包管理器)时,我看到以下错误。请任何人都可以建议我能做些什么来解决这个问题。
我已经尝试过的:
我尝试在 Xcode 首选项帐户中使用 SSH 身份验证而不是 https,当我这样做时,它在克隆公共 SPM 存储库时的第一步本身失败了。
我有这个简单的看法。
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
通常这个预览效果很好。但是今天,我收到此错误Unknown preview provider "ContentView_Previews_":
按下Try Again不起作用。当我按下时Diagnostics,显示:
RemoteHumanReadableError: Failed to update preview.
Error encountered when sending 'previewInstances' message to agent.
==================================
| RemoteHumanReadableError: Unknown preview provider "ContentView_Previews_"
|
| 5SwiftUI does not contain a preview provider named "ContentView_Previews_". Check your build settings to ensure the preview provider …Run Code Online (Sandbox Code Playgroud) 我正在使用 aUIHostingController嵌入ContentView其中ViewController。我想在按下“更改名称”按钮时更改 的ContentView名称。name这是我的代码:
class ViewController: UIViewController {
var contentView: ContentView? /// keep reference to ContentView
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.secondarySystemBackground
/// add the button
let button = UIButton()
button.frame = CGRect(x: 50, y: 50, width: 200, height: 100)
button.setTitle("Change name", for: .normal)
button.setTitleColor(.blue, for: .normal)
button.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
view.addSubview(button)
/// add the SwiftUI ContentView
let contentView = ContentView()
let hostingController = UIHostingController(rootView: contentView)
self.contentView = …Run Code Online (Sandbox Code Playgroud) 我正在努力让我的ScrollView:
这是我的代码:
struct ContentView: View {
init() {
UIScrollView.appearance().alwaysBounceVertical = false
}
var body: some View {
ScrollView {
Rectangle()
.fill(Color.blue)
.frame(height: 300) /// is smaller than the screen
.padding()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试设置UIScrollView.appearance().alwaysBounceVertical = false,但滚动视图仍然弹跳:
如果我这样做UIScrollView.appearance().bounces = false,它就会停止弹跳。但是,如果我使矩形比屏幕高,它也会停止弹跳(这是我不想要的)。
如何禁用弹跳,但仅当内容小于滚动视图的边界时?
我有一个简单的聊天视图,可以向上滚动以显示出现在聊天底部的新消息。奇怪的是,有时,滚动动画的持续时间比正常情况要长得多。

我认为当动画仍在进行时收到消息时就会发生这种情况。
我的代码如下所示:
struct
OverlayChatView: View
{
@ObservedObject public var stream : ChatStream
var body: some View {
ScrollViewReader { scrollView in
ScrollView {
LazyVStack(alignment: .leading, spacing: 0.0) {
ForEach(self.stream.messages) { inMsg in
ChatMessageCell(message: inMsg)
}
.onChange(of: self.stream.messages, perform: { inMessages in
if inMessages.count < 1 { return }
withAnimation(.linear(duration: 0.25)) {
scrollView.scrollTo(inMessages.last!.id, anchor: .bottom)
}
})
.padding(8)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
self.stream是从一个简单的计时器传入的,@ObservedObject ChatStream每 5.0 秒插入一条新消息。如果间隔为 2.0 秒,则它只是不断地缓慢向上滚动。
我注意到的另一件事是.onChange()每个插入都会被调用三次。也许我ChatStream正在做一些愚蠢的事情。我提到它是因为仅仅快速连续调用动画三次并不会导致速度变慢。它似乎与卷轴当前所在的位置与它必须去的位置更相关。
知道如何避免这种减速吗?
我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 Perfect 过渡到 Vapor。在 Perfect 中,将文件流式传输给用户,然后在文件完成后执行一些操作相对简单。
我试图在 Vapor 中做同样的事情,但我似乎无法弄清楚如何在流完成时设置回调,以及当它完成时,它是否完全被用户下载或有中断。
有谁知道如何做到这一点?这是我尝试过的一些事情。
这是基本结构
func downloadFile(request: Request) -> EventLoopFuture<Response> {
//do some authentication stuff here
let promise = request.eventLoop.makePromise(of: Response.self)
let response = request.fileio.streamFile(at: "somePath")
promise.succeed(response)
let future = promise.futureResult
return future
}
Run Code Online (Sandbox Code Playgroud)
第一次修改
func downloadFile(request: Request) -> EventLoopFuture<Response> {
//do some authentication stuff here
let promise = request.eventLoop.makePromise(of: Response.self)
let response = request.fileio.streamFile(at: "somePath")
promise.succeed(response)
let future = promise.futureResult
future.eventLoop.next().execute {
//run some post-download processing here.
//ideally I would like to know …Run Code Online (Sandbox Code Playgroud) 我正在尝试倾听@State变化并遵循这个答案。这是我的代码:
import SwiftUI
struct ContentView: View {
@State var isOn = false
var body: some View {
Toggle("Selection", isOn: $isOn)
.onReceive(Just(isOn)) { isOn in
print("Toggle is on? \(isOn)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
它无法编译:我得到“无法在范围内找到‘Just’”
Just是组合框架的一部分。但是,我以为SwiftUI已经导入了Combine?我Command单击import SwiftUI,然后按Jump to Definition,它就位于顶部。
一旦我添加import Combine到我的代码中,它就会编译。但这不应该是多余和不必要的吗?
我正在尝试构建一个泰语应用程序。为了显示泰语单词的发音,我想使用这三个特殊字符“\\ / -”。为了便于阅读,我想将这些字符的颜色更改为红色。\n有没有办法在 SwiftUI 中做到这一点?
\n我用它作为模型:
\nstruct Alphabet {\n var letter: String\n var byname: String\n var translation: String\n var consonantClass: ConsonantClass\n}\nRun Code Online (Sandbox Code Playgroud)\n这是视图模型:
\nlet middleConsonants: [Alphabet] = [\n Alphabet(letter: "\xe0\xb8\x81", byname: "g\xc3\xb4:- gai\\\\", translation: "Chicken", consonantClass: .middle)\n]\nRun Code Online (Sandbox Code Playgroud)\n在这里,在视图中,我想用不同的颜色显示它:
\nstruct ConsonantsListView: View {\n var vm: ConsonantsViewModel = ConsonantsViewModel()\n var consonants: [Alphabet]\n \n var body: some View {\n ForEach(0..<consonants.count, id: \\.self) { index in\n HStack {\n Spacer()\n NavigationLink(destination:\n VStack(spacing: 20) {\n Text(consonants[index].byname)\n .font(.largeTitle)\n Text(consonants[index].translation)\n }) {\n Text(consonants[index].letter)\n …Run Code Online (Sandbox Code Playgroud)