【问题标题】:Why NavigationView is shown inline when using emojis in navigationTitle in SwiftUI?为什么在 SwiftUI 的 navigationTitle 中使用表情符号时,NavigationView 会内联显示?
【发布时间】:2020-11-18 10:50:04
【问题描述】:

我是 SwiftUI 的新手,我遇到了一种让我发疯的奇怪行为。我以下面的代码为例:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            ScrollView {
                NavigationLink(
                    destination: NonEmojiView(),
                    label: { Text("NON-emoji view.") }
                )
                Spacer()
                NavigationLink(
                    destination: EmojiView(),
                    label: { Text("Emoji view.") }
                )
            }
            .navigationTitle("I love emojis")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


struct EmojiView: View {
    var body: some View {
        Text("Testing emojis in navigation titles.")
        .navigationTitle("♥️")
    }
}

struct NonEmojiView: View {
    var body: some View {
        Text("Testing emojis in navigation titles.")
        .navigationTitle("Boring title")
    }
}

当我运行这个应用程序(iOS 14,XCode 12.2)并点击表情符号视图(第二个导航链接),然后导航栏中的“image1) 而不是预期的 (image 2)。任何线索为什么?我做错什么了吗?这是一个 SwiftUI 错误吗?唯一的区别是标题中的表情符号。

编辑:正如 Luffy 所指出的,如果 ContentView 中的 navigationTitle 也包含表情符号,则效果很好。可能和标题的高度有关?这是一个 SwiftUI 错误。

谢谢!!

【问题讨论】:

    标签: swift swiftui swiftui-navigationlink swiftui-navigationview


    【解决方案1】:

    如果您在 ContentView 的 navBarTitle 中添加表情符号,它将起作用。如果你删除它,那么它不会。我认为这是一个 SwiftUI 错误。

    import SwiftUI
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                ScrollView {
                    NavigationLink(
                        destination: NonEmojiView(),
                        label: { Text("NON-emoji view.") }
                    )
                    Spacer()
                    NavigationLink(
                        destination: EmojiView(),
                        label: { Text("Emoji view.") }
                    )
                }
                .navigationBarTitle(Text("I ❤️ emojis"), displayMode: .large) // <~ HERE
            }
        }
    }
    
    struct EmojiView: View {
        let emoji = Image(systemName: "heart.fill")
        var body: some View {
            Text("Testing emojis in navigation titles.")
                .navigationBarTitle(Text("❤️"), displayMode: .large)
        }
    }
    
    struct NonEmojiView: View {
        var body: some View {
            Text("Testing emojis in navigation titles.")
                .navigationBarTitle(Text("Boring title"), displayMode: .large)
        }
    }
    
    

    【讨论】:

    • 好收获!确实如此。我认为它必须与navigationTitle的高度有关,似乎添加表情符号时高度有点大。我将向 Apple 发送错误请求。谢谢!
    • @Adrià 很高兴你注意到了。但是现在,如果你想让它工作,我写的解决方案也可以。如果您有任何发现,请随时通知我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2020-03-22
    • 2020-12-23
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多