作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 SwiftUI 中的文本(歌曲名称)添加字幕效果,以便它在大于屏幕宽度时在屏幕上水平滚动。
我知道MarqueeLabel可用于 UIKit,但我无法将其包装在 SwiftUI 中或找到可行的替代方案。
帮忙吗?
最佳答案
我知道这个问题很老了,但对于有同样问题的人来说。您可以将其包装在 UIViewRepresentable
中。像这样:
struct UILabelView : UIViewRepresentable {
var text: String
typealias UIViewType = MarqueeLabel
func makeUIView(context: UIViewRepresentableContext<UILabelView>) -> MarqueeLabel {
let label = MarqueeLabel()
label.text = text
label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
return label
}
func updateUIView(_ uiView: MarqueeLabel, context: UIViewRepresentableContext<UILabelView>) { }
}
然后,如果您有一个有限的 View ,它应该可以工作:
UILabelView(text: "a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20")
.frame(width: 40)
至于您在评论“出于某种原因, View 超出了我的屏幕宽度”中的问题。关键是在 MarqueeLabel 上使用 .setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
正如@Asperi 在 this post 中解释的那样.
关于swiftui - 如何在 SwiftUI 中包装和使用 MarqueeLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63397506/
我是一名优秀的程序员,十分优秀!