Проблема с самостоятельным изменением размера изображения, встроенного в NavigationButton. Становится синим

У меня странная проблема: если изображение с изменяемым размером, которое я сделал (настраиваемое представление), отсутствует в NavigationButton, оно работает нормально, но если оно есть, то изображение по-прежнему имеет хороший размер, но становится полностью синим. Кто-нибудь знает, что не так?

struct DynamicallyResizableImage: View {
    let imageName: String
    let height: CGFloat
    let width: CGFloat

    init(imageName: String, height: CGFloat? = nil, width: CGFloat? = nil) {
        self.imageName = imageName
        let imageSize = UIImage(named: imageName)!.size

        guard let height = height else {
            if let width = width {

                self.width = width
                self.height = imageSize.height * (width/imageSize.width)
                return
            }
            self.height = 0
            self.width = 0
            return
        }

        if let width = width {
            self.height = height
            self.width = width
            return
        }

        self.height = height
        self.width = imageSize.width * (height/imageSize.height)
    }

    var body: some View {
        Image(imageName)
            .resizable()
            .frame(width: width, height: height)
    }

}
NavigationButton(destination: PicturePreviewView(imageName: "IMG_4955")) {
                        DynamicallyResizableImage(imageName: "IMG_4955", height: 200)
                    }

Когда он не встроен в NavigationButton, все работает отлично. При внедрении в NavigationButton изображение заполняется синим цветом.

Кто-нибудь знает, как это исправить? Спасибо!!!


person Danny Richard Aboo    schedule 17.06.2019    source источник
comment
Я вообще не использовал SwiftUI, но если это что-то вроде UIBarButtonItem, используемого в UINavigationBar или UIToolBar из UIKit, то это потому, что изображение обрабатывается как маска и отображается текущий цвет оттенка. Посмотрите, есть ли в SwiftUI способ указать, что изображение следует рассматривать как оригинальное, а не как шаблон.   -  person rmaddy    schedule 18.06.2019
comment
@rmaddy Спасибо за комментарий! Нет, обычно вы используете его в ячейках списка (что-то вроде ячеек UITableView), но не ограничиваясь, я думаю. Это просто кнопка с действием, которая позволяет перейти на другой экран.   -  person Danny Richard Aboo    schedule 18.06.2019
comment
@rmaddy Действительно, проблема заключалась в том, что вы описали. Мне пришлось установить исходный режим рендеринга, как я написал в своем ответе ниже.   -  person Danny Richard Aboo    schedule 18.06.2019


Ответы (1)


Поэтому я исправил это с помощью товарища по реддитору. Внутри пользовательского представления мне пришлось добавить renderMode к Image вот так:

Image(imageName)
            .renderingMode(.original)
            .resizable()
            .frame(width: width, height: height)
person Danny Richard Aboo    schedule 18.06.2019
comment
Это замечательно, у меня была эта ошибка еще с seed1, и она сводила меня с ума. Может быть, Apple нужно установить исходное изображение по умолчанию, или, может быть, нужно изменить поведение NavigationButton. Но это решает проблему! - person Dimillian; 18.06.2019