在 SwiftUI 中动态更改导航标题?

Posted

技术标签:

【中文标题】在 SwiftUI 中动态更改导航标题?【英文标题】:Dynamically change Navigation Title in SwiftUI? 【发布时间】:2020-12-04 19:54:30 【问题描述】:

在 SwiftUI 中不可能有一个动态的导航标题。下面的代码不会随着计时器的流逝而更新标题。有没有办法做到这一点? (这是在 WatchOS 中)

(为更可测试的示例编辑代码)

import SwiftUI

struct TimerTestView: View 
    
    @State private var timeRemaining = 100
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    
    
    var body: some View 
        Text("\(timeRemaining)")
            .onReceive(timer)  time in
                if self.timeRemaining > 0 
                    self.timeRemaining -= 1
                
            
            .navigationTitle("\(timeRemaining)")
    


struct TimerTestView_Previews: PreviewProvider 
    static var previews: some View 
        TimerTestView()
    

【问题讨论】:

需要以某种方式进行调试 - 你能提供最小的工作演示吗? @Asperi 我上面的例子怎么样 【参考方案1】:

只需包裹到NavigationView 即可解决问题(Xcode 12.1 / watchOS 7.0)

var body: some View 
    NavigationView 
        Text("\(timeRemaining)")
                .onReceive(timer)  time in
                     if self.timeRemaining > 0 
                          self.timeRemaining -= 1
                     
                
            .navigationTitle("\(timeRemaining)")
    

【讨论】:

? 现在运行良好,谢谢!在我的生产应用程序中,我在 NavigationView 内的堆栈中包装了一个较早的视图,在这个视图中,我再次包装在导航视图中,它根本没有出现。当我早些时候在堆栈中删除 NavigationView 时,它现在出现并倒计时。 ? 我看到了同样的问题,但无法让它工作。并不是说这是一个不好的答案,只是它不适用于每个人:(

以上是关于在 SwiftUI 中动态更改导航标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift UI 中单击按钮时从 swift UI 导航到情节提要?

如何在 SwiftUI 中动态隐藏导航返回按钮

在 Swift/SwiftUI 中更改十进制数的字体大小

从 swiftUI 中的一个嵌入式 UIViewController 导航到 swift UI 中的另一个嵌入式 UIViewcontroller

SwiftUI 更改内联 navigationBarTitleDisplayMode 的导航栏背景颜色

SWIFTUI:在视图中导航并返回