富文本解决方案大致有下面几种
1、Text的超链接:
2、如果是单行文字使用HStack把多个Text拼接起来,这种方式比较简单也用的比较多
3、Text + Text的拼接,处理onTapGesture事件。不可行,因为onTapGesture返回的是some View,而不是Text,+ 拼接是适用于Text,所以不可行。
4、 跳转URL Schemes,在本应用中接收。可行
这里主要介绍几种常见的解决方案
Text跳转URL Schemes
设置超链接需要先在 target ——> info ——> URL Types ,新建一个URL Schemes。
Text("登录即代表您已同意并同意[《XX商城使用协议》](mydemo:protocol)")
.onOpenURL { url in
switch url.absoluteString {
case "mydemo:protocol":
//todo something
break
default:
break
}
}
HStack包裹两个Text
这种方式比较适用单行且内容固定的场景
HStack{
Text("登录即代表您已同意并同意")
.font(.system(size: 14))
Text("《XX商城使用协议》")
.font(.system(size: 14))
.foregroundColor(.orange)
.onTapGesture {
print("点击协议")
}
}
.frame(width: UIScreen.main.bounds.size.width)
Text + Text的拼接
此种方式比较灵活唯一不好的地方是,无法处理富文本内容的onTapGesture事件,因为onTapGesture返回的是some View,而不是Text,+ 拼接是适用于Text,所以不可行,可以把点击事件放在外层,让整行都可以点击,用来处理该场景还是比较合适的
HStack{
Text("登录即代表您已同意并同意")
.font(.system(size: 14))
+
Text("《XX商城使用协议》")
.font(.system(size: 14))
.foregroundColor(.orange)
}
.frame(width: screenWidth)
.onTapGesture {
print("点击协议")
}
标签:font,onTapGesture,HStack,Text,拼接,SwiftUI,文本,size
From: https://www.cnblogs.com/qqcc1388/p/16872683.html