SwiftUI View отображается на синем фоне

Я пытаюсь воспроизвести руководство Apple (Создание сложных интерфейсов), и у меня возникла очень странная проблема. Мое CategoryItem представление отображается в виде синей рамки.

Если я удалю NavigationLink, который его обертывает, все будет работать нормально, но с этим - нет.

struct CategoryRow: View {
    var categoryName: String
    var items: [Landmark]

    var body: some View {

        VStack(alignment: .leading) {
            Text(self.categoryName)
                .font(.headline)
                .padding(.leading, 15)
                .padding(.top, 5)

            ScrollView(.horizontal, showsIndicators: false) {
                HStack(alignment: .top, spacing: 0) {
                    ForEach(self.items) { landmark in
                        NavigationLink(
                            destination: LandmarkDetail(
                                landmark: landmark
                            )
                        ) {
                            CategoryItem(landmark: landmark)
                        }
                    }
                }
            }.frame(height: 185)
        }
    }
}

введите здесь описание изображения


person Rexhin    schedule 05.11.2019    source источник
comment
Из кода, который вы разместили, будет сложно определить, что вызывает синий цвет. Загрузка и запуск полного кода руководства работает должным образом. Я бы посоветовал сравнить код в завершенном проекте с нашим собственным проектом, используя инструмент сравнения, чтобы вы могли увидеть, где есть различия и что может вызвать вашу ошибку.   -  person Andrew    schedule 05.11.2019
comment
Я проверил каждую строку и это одно и то же. Думаю, что-то должно быть обновлено   -  person Rexhin    schedule 05.11.2019
comment
Даже если вы замените CategoryItem(landmark: landmark) на что-то еще, например текст или изображение, оно все равно будет синим   -  person Rexhin    schedule 05.11.2019
comment
Вы увидите синий вид, если запустите завершенный проект? Также какую версию Xcode вы используете?   -  person Andrew    schedule 05.11.2019
comment
Делает ли что-нибудь вызов .renderingMode(.original) на изображении внутри CategoryItem? А для текста вы можете попробовать явно вызвать .foregroundColor(.black).   -  person cbjeukendrup    schedule 05.11.2019
comment
Вот это да. это сработало! спасибо ... а почему ....?   -  person Rexhin    schedule 05.11.2019


Ответы (2)


NavigationLink по умолчанию имеет синий цвет акцента, просто вызовите .accentColor(Color.clear) для него

Или вы можете попробовать это:

NavigationView {
    NavigationLink(destination: Text("Detail view here")) {
        Image("YourImage")
    }
    .buttonStyle(PlainButtonStyle())
}

https://www.hackingwithswift.com/quick-start/swiftui/how-to-disable-the-overlay-color-for-images-inside-button-and-navigationlink

person Sorin Lica    schedule 05.11.2019

renderingMode(.original) это то, что сделало это для меня; .accentColor(Color.clear) сделал изображение невидимым (мое лучшее объяснение здесь, потому что у него не было прозрачности).

NavigationView {
    NavigationLink(destination: Text("Detail view here")) {
        Image("YourImage")
            .renderingMode(.original)
    }
}

Как упоминалось выше, Как отключить цвет наложения для изображений внутри Button и NavigationLink - тоже хорошая статья.

person Zorayr    schedule 06.06.2020