小编ahe*_*eze的帖子

viewDidLoad() 有什么用?

有人可以帮我理解 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 我是新来的,请随时对我的问题格式发表任何评论。

uiviewcontroller ios

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

SwiftUI 中 ScrollView 下的按钮

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) 按钮和 3 个垂直放置的灰色矩形

button uiscrollview ios swift swiftui

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

Swift 包管理器:二进制目标的工件下载失败:状态码无效 404

我使用私有仓库创建了一个 Swift 包管理器。xcframework zip 文件位于此私有存储库中。设置的 swift 包管理器位于公共存储库中。当我尝试在示例应用程序中集成此 SPM(swift 包管理器)时,我看到以下错误。请任何人都可以建议我能做些什么来解决这个问题。

在此处输入图片说明

我已经尝试过的:

我尝试在 Xcode 首选项帐户中使用 SSH 身份验证而不是 https,当我这样做时,它在克隆公共 SPM 存储库时的第一步本身失败了。

错误 : 在此处输入图片说明

ios swift swift-package-manager

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

SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中

我有这个简单的看法。

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_"

未知的预览提供程序“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)

xcode ios swift swiftui

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

UIViewController 中嵌入的 UIHostingController - 如何从外部更新 @State?

我正在使用 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)

ios swift swiftui swiftui-state

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

SwiftUI - 如何使 ScrollView 在内容小于边界时不弹起

我正在努力让我的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,但滚动视图仍然弹跳:

在ScrollView上垂直滑动,但仍然弹跳

如果我这样做UIScrollView.appearance().bounces = false,它就会停止弹跳。但是,如果我使矩形比屏幕高,它也会停止弹跳(这是我不想要的)。

不反弹(耶!) ...但当内容溢出屏幕时不会弹起
在带有短矩形的 ScrollView 上垂直滑动不会反弹 在具有高矩形的 ScrollView 上垂直滑动也不会反弹

如何禁用弹跳,但仅当内容小于滚动视图的边界时?

uiscrollview ios swift swiftui

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

SwiftUI ScrollView 动画滚动有时很慢

我有一个简单的聊天视图,可以向上滚动以显示出现在聊天底部的新消息。奇怪的是,有时,滚动动画的持续时间比正常情况要长得多。

显示有时缓慢的滚动行为的动画 GIF。

我认为当动画仍在进行时收到消息时就会发生这种情况。

我的代码如下所示:

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正在做一些愚蠢的事情。我提到它是因为仅仅快速连续调用动画三次并不会导致速度变慢。它似乎与卷轴当前所在的位置与它必须去的位置更相关。

知道如何避免这种减速吗?

ios swift swiftui

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

在 Vapor 4 中的文件流之后运行操作

我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 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)

swift vapor server-side-swift swift-nio

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

当 SwiftUI 已经导入合并时,为什么我还需要导入它?

我正在尝试倾听@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”的行突出显示的范围内找不到“Just”

Just是组合框架的一部分。但是,我以为SwiftUI已经导入了Combine?我Command单击import SwiftUI,然后按Jump to Definition,它就位于顶部。

跳转到定义 import Combine位于顶部
跳转到弹出菜单中的定义 SwiftUI 文件的第 1 行是 import Combine

一旦我添加import Combine到我的代码中,它就会编译。但这不应该是多余和不必要的吗?

构建成功

ios swift swiftui combine

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

SwiftUI 有没有办法改变字符串中特殊字符的颜色?

我正在尝试构建一个泰语应用程序。为了显示泰语单词的发音,我想使用这三个特殊字符“\\ / -”。为了便于阅读,我想将这些字符的颜色更改为红色。\n有没有办法在 SwiftUI 中做到这一点?

\n

我用它作为模型:

\n
struct Alphabet {\n    var letter: String\n    var byname: String\n    var translation: String\n    var consonantClass: ConsonantClass\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是视图模型:

\n
let middleConsonants: [Alphabet] = [\n    Alphabet(letter: "\xe0\xb8\x81", byname: "g\xc3\xb4:- gai\\\\", translation: "Chicken", consonantClass: .middle)\n]\n
Run Code Online (Sandbox Code Playgroud)\n

在这里,在视图中,我想用不同的颜色显示它:

\n
struct 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)

ios swift swiftui

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