【发布时间】:2020-11-07 11:16:25
【问题描述】:
我正在尝试将用户的图像和名称添加到导航栏,如下所示:
我正在尝试以编程方式执行此操作,因为我的代码库不使用 xib 或情节提要(启动屏幕除外)。
下面是我的代码的简要介绍:
guard let prof = self.profile else { return }
let imageView = ImageView(type: .none, avatar: true, 25)
let nameLabel = UILabel()
nameLabel.text = prof.name
nameLabel.numberOfLines = 0
imageView.setImage(prof.profileImage?.imageURL)
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 300))
view.addSubview(nameLabel)
view.addSubview(imageView)
nameLabel.snp.makeConstraints { make in
make.bottom.equalToSuperview().inset(5)
make.left.right.equalToSuperview()
}
imageView.snp.makeConstraints { make in
make.bottom.equalTo(nameLabel.snp.top).offset(5)
make.top.equalToSuperview().inset(5)
}
self.navigationItem.titleView = view
我使用SnapKit 来布置 UI,ImageView 只是一个自定义 UIImageView,它处理下载图像,有一个内置的加载指示器,一些格式化选项,并通过告诉 init 它是一个头像图像, 也请求更小尺寸的图像。
我对父视图使用 300 的高度仅作为测试,以使导航栏更高以容纳我的内容,但高度没有变化。
如果有人有办法完成此设计或类似的替代方案,我将非常感谢您提供的帮助。
编辑:不使用 SnapKit 的解决方案完全可以。
编辑:@asanli 对解决方案的描述如下:
代码在这里:
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 300))
view.addSubview(nameLabel)
view.addSubview(imageView)
imageView.snp.makeConstraints { make in
make.top.equalToSuperview().inset(10)
make.width.height.equalTo(50)
make.centerX.equalToSuperview()
}
nameLabel.snp.makeConstraints { make in
make.top.equalTo(imageView.snp.bottom).offset(10)
make.centerX.equalToSuperview()
}
【问题讨论】:
-
为什么不简单地创建自己的视图? UINavigationBar 不会有那么多空间。
-
@PGDev 请问我自己在导航栏中的视图吗?发给我的设计要求和产品要求是需要在导航栏中。难道我自己的视图就在导航栏下方,因此不是一回事吗?
标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem