iOS Swift4导航栏居中标题左侧添加图片问题求助
嘿,我完全懂你遇到的这个麻烦——想让导航栏标题居中,同时在标题左边放个图标,结果折腾富文本的时候图片总跑到右边,对吧?我之前做项目的时候也踩过这个坑,给你两个实用的解决方案,帮你搞定这个问题:
方案一:用富文本正确控制图片位置
你之前应该是把文字放在了图片前面拼接,所以图片才会跑到右边。只要调整富文本的拼接顺序,先加图片附件,再加文字,就能让图片乖乖待在标题左侧,同时整体居中。完整代码如下:
// 1. 调整图片尺寸 let image = UIImage(named: "user2")! let newSize = CGSize(width: 30, height: 30) UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.main.scale) image.draw(in: CGRect(origin: .zero, size: newSize)) let resizedImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() // 2. 创建图片文本附件,调整垂直对齐 let imageAttachment = NSTextAttachment() imageAttachment.image = resizedImage // y值可以根据你的字体大小微调,确保图片和文字垂直居中 imageAttachment.bounds = CGRect(x: 0, y: -4, width: newSize.width, height: newSize.height) // 3. 先添加图片,再添加标题文字(记得加个空格隔开) let attributedText = NSMutableAttributedString(attributedString: NSAttributedString(attachment: imageAttachment)) let titleString = NSAttributedString(string: " 我的应用标题") attributedText.append(titleString) // 4. 设置导航栏标题View let titleLabel = UILabel() titleLabel.attributedText = attributedText titleLabel.sizeToFit() navigationItem.titleView = titleLabel
方案二:自定义UIStackView(更易维护)
如果觉得富文本的对齐和样式调整太麻烦,直接用UIStackView把图片和标题Label组合起来是更直观的选择,后续修改样式也更灵活:
// 1. 创建并配置图片View let imageView = UIImageView(image: UIImage(named: "user2")) imageView.frame = CGRect(x: 0, y: 0, width: 30, height: 30) imageView.contentMode = .scaleAspectFit // 2. 创建标题Label let titleLabel = UILabel() titleLabel.text = "我的应用标题" titleLabel.font = UIFont.systemFont(ofSize: 17, weight: .semibold) titleLabel.textColor = .label // 适配明暗模式 // 3. 用StackView组合图片和文字 let stackView = UIStackView(arrangedSubviews: [imageView, titleLabel]) stackView.axis = .horizontal stackView.spacing = 8 // 图片和文字的间距,可按需调整 stackView.alignment = .center // 4. 设置为导航栏标题View navigationItem.titleView = stackView stackView.sizeToFit()
这个方案的好处是,不管你后续要调整图片大小、文字样式还是间距,直接修改对应的控件属性就行,不用跟富文本的各种属性较劲。
你可以根据自己的需求选其中一种,亲测都能实现你要的“标题居中+左侧图片”效果~
内容的提问来源于stack exchange,提问作者Android teem
相关产品推荐
相关产品推荐

