【发布时间】:2018-09-13 07:44:43
【问题描述】:
我知道如何在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
}
【问题讨论】:
-
你看过
UIStackView吗? -
@Malik 闪过我的脑海,但从未这样做过,我不知道该怎么做。
-
一种方法是在
titleView的navigationItem上呈现自定义 UIView -
@kathayatnk 试图用
UIStackView做到这一点(更新了上面的代码)但我有一些问题
标签: swift uiimageview uinavigationbar uistackview