英文:
SwiftUI how to apply text modifier to custom view with Text in it
问题
我创建了一个自定义文本组件,它包装了文本内容。
struct ScrollText: View {
let text: String
var body: some View {
Text("\(text) the logic is like that")
}
}
然后,我希望这个视图可以使用Text的修饰符,比如.font
、.fontWeight
和.tracking
。
ScrollText(text: "abcdefg")
.font(.body)
.tracking(-0.3)
但我发现在iOS 15中只有.font
可以正常工作。我该怎么做才能使它像普通的Text组件一样工作?
英文:
I create a custom text component, which wraps the Text in it.
struct ScrollText:View{
let text: String
var body: some View {
Text("\(text) the logic is like that")
}
}
Then I want this view can use the modifier of Text such as .font
, .fontWeight
, .tracking
ScrollText(text:"abcdefg")
.font(.body)
.tracking(-0.3)
But I found that in iOS 15 only .font
can work.
What can I do to make it work as the normal Text component?
答案1
得分: 0
在iOS 15中,为什么文本修饰符不能用在我的自定义视图中是因为这些修饰符只适用于类型 "Text",而我们的视图返回的是 "some View"。
所以可以通过以下方式实现:
extension Text {
func addaPlus(activate: Bool) -> some View {
return ScrollText(text: self, activate: activate)
}
}
在这个函数中,self
意味着文本,而不是将字符串传递给视图,我们将文本放在最后的位置,将文本转换为某个视图。
顺便说一下,我不知道如何通过这样做来读取和修改文本中的字符串。
Text(longText)
.tracking(-0.3)
.addaPlus(activate: activate)
但是,如果你可以返回 "Text" 而不是 "some View",你仍然可以在此之后使用文本专用的修饰符。
英文:
Why text modifiers can not be used in my custom view is that in iOS 15, these modifiers only works with type "Text", but our view return "some View" instead.
So it can be done by using
extension Text{
func addaPlus(activate:Bool)->some View{
return ScrollText(text: self, activate: activate)
}
}
In this function, self
means Text, and instead of passing the string to the view we pass the Text and place it in the last position, which transforms the Text to some View.
By the way, I don't know how to read and modify the string inside the text by doing this.
Text(longText)
.tracking(-0.3)
.addaPlus(activate: activate)
But if you can return Text instead of some View, you can still use Text-only modifiers below this one.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论