2016-06-24 5 views
7

У меня есть следующий код, чтобы сделать панель навигации прозрачной, но в том же время отображения кнопки назад, это работает на все версии прошивки, но его перестали работать с бета IOS 10Как сделать панель навигации прозрачной прошивки 10

navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
    navigationBar.shadowImage = UIImage() 
    navigationBar.isTranslucent = true 

Что-то изменилось с iOS 10 в этой области?

Обратите внимание, что невозможно использовать navigationBar.isHidden, так как это приведет к исчезновению кнопки и заголовка навигационной панели.

ответ

10

Я не знаю, что изменилось в iOS 10, чтобы остановить предыдущий код от работы, но для его исправления я создал прозрачное изображение (оно должно быть только одним пикселем в размерности) и использовало следующий код, чтобы сделать навигационная панель прозрачная (но все же показывает обратную навигационную кнопку).

let transparentPixel = UIImage(named: "TransparentPixel") 
    navigationBar.setBackgroundImage(transparentPixel, for: UIBarMetrics.default) 
    navigationBar.shadowImage = transparentPixel 
    navigationBar.backgroundColor = UIColor.clear() 
    navigationBar.isTranslucent = true 

Кстати, если вы хотите изменить цвет панели навигации, вы можете использовать один и тот же принцип:

let redPixel = UIImage(named: "RedPixel") 
    navigationBar.setBackgroundImage(redPixel, for: UIBarMetrics.default) 
    navigationBar.shadowImage = redPixel 
    navigationBar.isTranslucent = false 
6

Решение @Essence при условии, работает отлично!
Это то, что я использую даже для создания 1px прозрачного изображения с помощью кода:

class MainClass: UIViewController { 

    let transparentPixel = UIImage.imageWithColor(color: UIColor.clear) 

    override func viewWillAppear(_ animated: Bool) { 
    drawCustomNavigationBar() 
    } 

    func drawCustomNavigationBar() { 
    let nav = (self.navigationController?.navigationBar)! 
    nav.setBackgroundImage(transparentPixel, for: UIBarMetrics.default) 
    nav.shadowImage = transparentPixel 
    nav.isTranslucent = true 
    } 
} 

extension UIImage { 
    class func imageWithColor(color: UIColor) -> UIImage { 
    let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1)) 
    UIGraphicsBeginImageContext(rect.size) 
    let context = UIGraphicsGetCurrentContext()! 

    context.setFillColor(color.cgColor) 
    context.fill(rect) 

    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return image! 
    } 
} 
1

Swift 3.x

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
self.navigationController?.navigationBar.shadowImage = UIImage() 
self.navigationController?.navigationBar.backgroundColor = .clear 
self.navigationController?.navigationBar.isTranslucent = true 
Смежные вопросы