iOS 13 внешний вид панели навигации setBackIndicatorImage не работает - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь использовать новый API внешнего вида панели навигации iOS для настройки индикатора кнопки возврата моего приложения, но он не работает:

    let bar = self.navigationController!.navigationBar
    let sz = CGSize(20,20)
    let arrow = UIImage(systemName:"arrowtriangle.left")!
    let indic =
        UIGraphicsImageRenderer(size:sz).image { ctx in
            arrow.draw(in:CGRect(0,0,20,20)) // indicator is arrow
    }
    let indicmask =
        UIGraphicsImageRenderer(size:sz).image { ctx in
            ctx.fill(CGRect(0,0,20,20)) // mask is entire image
        }
    bar.standardAppearance.setBackIndicatorImage(
        indic, transitionMaskImage: indicmask)

Все, что я вижу, это большой синий прямоугольник.

enter image description here

Что происходит?

1 Ответ

2 голосов
/ 30 сентября 2019

Это очень глупая ошибка: у Apple параметры задом наперед! Просто поменяйте местами изображение, чтобы перейти туда, где должна быть маска, и маску, чтобы перейти туда, где должно быть изображение, и все будет хорошо:

    let bar = self.navigationController!.navigationBar
    let sz = CGSize(20,20)
    let arrow = UIImage(systemName:"arrowtriangle.left")!
    let indic =
        UIGraphicsImageRenderer(size:sz).image { ctx in
            arrow.draw(in:CGRect(0,0,20,20)) // indicator is arrow
    }
    let indicmask =
        UIGraphicsImageRenderer(size:sz).image { ctx in
            ctx.fill(CGRect(0,0,20,20)) // mask is entire image
        }
    bar.standardAppearance.setBackIndicatorImage(
        indicmask, transitionMaskImage: indic) // swap!

enter image description here

...