Swift ios, как настроить, чтобы изображение навигационной панели не растягивалось - PullRequest
0 голосов
/ 07 мая 2018

Я сделал возможным добавить фоновое изображение на панель навигации, используя код ff, но изображение растянуто. Есть ли способ, чтобы он не растягивался?

 self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "BG.jpg"), for: .default)

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

/// Это свойство установит изображение на панель навигации

public var navigationBarImage: UIImage? {
    get {
        return (navigationItem.titleView as? UIImageView)?.image
    } set {
        if newValue != nil {
            let imageView = UIImageView(image: newValue)
            imageView.contentMode = .scaleAspectFit
            navigationItem.titleView = imageView
        } else {
            navigationItem.titleView = nil
        }
    }
}
0 голосов
/ 07 мая 2018

для всех изображений вы можете установить режим содержимого =

.scaleToFill (UIViewContentModeScaleToFill)
.scaleAspectFit (UIViewContentModeScaleAspectFit)
.scaleAspectFill (UIViewContentModeScaleAspectFill) 

Если вы не хотите видеть содержимое, находящееся за пределами границ, вам нужно помнить, чтобы для clipsToBounds было установлено значение true для содержащего суперпредставления

View.clipsToBounds = true
0 голосов
/ 07 мая 2018

Вы можете попробовать это,

UINavigationBar.appearance().setBackgroundImage(UIImage(named: "BG.jpg")!.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: .stretch), for: .default)

Попробуйте и другие варианты в коде.

UPDATE

Вы даже можете попробовать ниже категории для UINavigationBar

extension UINavigationController {
    func setBackgroundImage(_ image: UIImage) {
        navigationBar.isTranslucent = true
        navigationBar.barStyle = .blackTranslucent

        let imageView = UIImageView(image: image)
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        imageView.translatesAutoresizingMaskIntoConstraints = false

        view.insertSubview(imageView, belowSubview: navigationBar)
        NSLayoutConstraint.activate([
            imageView.leftAnchor.constraint(equalTo: view.leftAnchor),
            imageView.rightAnchor.constraint(equalTo: view.rightAnchor),
            imageView.topAnchor.constraint(equalTo: view.topAnchor),
            imageView.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor)
        ])
    }
}

Код выше может отличаться в зависимости от ваших окончательных требований.

...