Swift开发:如何实现自定义标签与文本内容末尾对齐
问题原因
你之前的两种实现方式存在以下问题:
- 自定义
RightIconLabelStyle用HStack布局时,会将多行标题文本视为一个完整的矩形块,标签只会对齐整个文本块的右下方,无法跟随最后一行文本的末尾排布。 - 直接拼接
Text时,.background属于View层级的修饰符,添加后会将Text类型转为some View,而Text的+运算符仅支持拼接Text类型,因此会报错。
可行解决方案
方案1:使用AttributedString(适配iOS 15+)
直接用富文本拼接正文和标签,为标签单独配置背景色等样式,原生支持内联跟随文本末尾的效果:
// 构造正文富文本 var content = AttributedString("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Illud mihi a te nimium festinanter dictum videtur ") content.font = .system(size: 16) // 可自定义正文样式 // 构造标签富文本 var tag = AttributedString(" TEST ") tag.font = .system(size: 16) tag.foregroundColor = .white tag.backgroundColor = .orange // 直接拼接后渲染 Text(content + tag)
方案2:使用NSAttributedString(适配iOS 15以下版本)
如果需要兼容更低版本的系统,可以用NSMutableAttributedString实现同样的效果:
let contentStr = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Illud mihi a te nimium festinanter dictum videtur " let attrStr = NSMutableAttributedString(string: contentStr, attributes: [ .font: UIFont.systemFont(ofSize: 16) ]) let tagAttr: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 16), .foregroundColor: UIColor.white, .backgroundColor: UIColor.orange ] attrStr.append(NSAttributedString(string: " TEST ", attributes: tagAttr)) Text(AttributedString(attrStr))
内容的提问来源于stack exchange,提问作者vamp
相关产品推荐
相关产品推荐

