Невозможно добавить изображение (изображение профиля) кнопку в UINavigationBar - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь заставить мой UINavigationBar отобразить круглое изображение профиля в левом верхнем углу.Я могу с легкостью отображать изображения / значки, используя следующие экземпляры.

self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: icon, style: .plain, target: self, action: #selector(funcToCall))

Проблема заключается в том, что при попытке работы с изображениями профиля ни пользовательские представления, ни создание экземпляров изображения не дают желаемого результата.

Попытка 1 - Swift 4 (создание экземпляра)

let img = originalImage.withRenderingMode(.alwaysOriginal)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: img, style: .plain, target: self, action: #selector(goToProfile))

Эта попытка дает следующий результат .

Проблемы:

  • Несмотря на то, что я указал leftBarButtonItem, он отображается посередине
  • Я не могу создать круглую кнопку, используя эту стратегию, поскольку нет представления для изменения cornerRadius для.

Попытка 2 - Swift 4 (пользовательские виды)

let idealButton = UIButton(frame: CGRect(x: 0, y: 0, width: 32, height: 32))
idealButton.setImage(imgToUse, for: .normal)
idealButton.imageView?.contentMode = .scaleAspectFill

idealButton.imageView?.layer.cornerRadius = 0.5 * idealButton.frame.width
idealButton.imageView?.layer.borderWidth = 0.75
idealButton.imageView?.layer.borderColor = rgba(240,240,240,1).cgColor

idealButton.addTarget(self, action: #selector(goToProfile), for: .touchUpInside)
navigationItem.setLeftBarButton(UIBarButtonItem(customView: idealButton), animated: false)

Эта попытка дает следующий результат ,

Проблемы

  • Изображение охватывает всего UINavigationBar.Он не ограничен указанными размерами.

Любая помощь очень ценится.Спасибо!

1 Ответ

0 голосов
/ 23 декабря 2018

Давайте попробуем с добавлением UIButton в качестве подпредставления UINavigationBar

Итак, начнем с создания кнопки и установки ее свойств (вы можете использовать переменную lazy в глобальной области видимости)

lazy var idealButton: UIButton = {
    let button = UIButton()
    button.setImage(imgToUse, for: .normal)
    button.imageView?.layer.cornerRadius = 16
    ... // set other button's properties (border, target, colors, etc.)
    return button
}()

Теперь добавьте эту кнопку в качестве подпредставления текущего navigationController navigationBar

guard let navigationBar = navigationController?.navigationBar else { return }
navigationBar.addSubview(idealButton)

, затем просто установите ограничения для вашей кнопки (вам нужно установить высоту и ширину, как вам нужно, и слева и снизуограничения, равные ограничениям navigationBar)

idealButton.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
    idealButton.leftAnchor.constraint(equalTo: navigationBar.leftAnchor, constant: 20),
    idealButton.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor, constant: -6),
    idealButton.heightAnchor.constraint(equalToConstant: 32),
    idealButton.widthAnchor.constraint(equalToConstant: 32)
])
...