Я знаю, как центрировать одно изображение в UINavigationBar
, но не знаю, как это сделать с динамическим числом изображений.У меня есть приложение чата, которое поддерживает групповые чаты.Количество людей в групповом чате может быть всего 3, но верхнего предела нет.
В UINavigationBar
я должен установить заголовок, чтобы показывать как минимум 4 или 5 наложенных изображений (но не более того, поскольку это выглядит странно на UINavigationBar
), а UILabel
показывает, какмного других пользователей находятся в том же групповом чате (т.е. + 15 more
).Название (все изображения и метка) должно быть центрировано в UINavigationBar
.Изображения загружаются с сервера.
Когда пользователь нажимает на заголовок (любое из изображений или метку в UINavigationBar
), он должен вызвать действие, чтобы показать полный список пользователей вотдельный UIViewController
Количество наложенных изображений является динамическим (на основе каждого группового чата), но я не могу понять, как это сделать.Вот как должен выглядеть конечный результат:
Кто-нибудь делал это раньше или у вас есть идея, как это сделать?Помощь очень ценится
ОБНОВЛЕНИЕ:
Я пытался выполнить это с UIStackView
, но у меня есть несколько проблем.Вот код:
var navStackView : UIStackView = {
let stack = UIStackView()
stack.axis = .horizontal
stack.backgroundColor = .red
stack.alignment = .fill
stack.distribution = .fillEqually
stack.translatesAutoresizingMaskIntoConstraints = false
return stack
}()
var images = ["1", "2", "3", "4"]
override func viewDidLoad() {
super.viewDidLoad()
let navController = navigationController!
navController.navigationBar.addSubview(navStackView)
// x, y, w, h
navStackView.leadingAnchor.constraint(equalTo: navController.navigationBar.leadingAnchor).isActive = true
navStackView.trailingAnchor.constraint(equalTo: navController.navigationBar.trailingAnchor).isActive = true
navStackView.topAnchor.constraint(equalTo: navController.navigationBar.topAnchor).isActive = true
navStackView.bottomAnchor.constraint(equalTo: navController.navigationBar.bottomAnchor).isActive = true
for image in images {
let imageView = UIImageView()
imageView.image = UIImage(named: image)
imageView.layer.cornerRadius = imageView.bounds.height / 2
imageView.clipsToBounds = true
imageView.layer.masksToBounds = true
imageView.contentMode = .scaleAspectFill
// imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
navStackView.addArrangedSubview(imageView)
navStackView.layoutIfNeeded()
}
navigationItem.titleView = navStackView
}
Вот результат (пока я застрял, не знаю, как этого добиться): ![enter image description here](https://i.stack.imgur.com/o3Amg.png)