首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UIViewRepresentable包装MarqueeLabel视图

使用UIViewRepresentable包装MarqueeLabel视图
EN

Stack Overflow用户
提问于 2022-07-04 10:37:45
回答 1查看 73关注 0票数 1

我有一个简单的UIViewRepresentable的MarqueeLabel,但它不工作。我的猜测是,框架没有正确设置,但我不知道作为框架传递给MarqueeLabel初始化程序的是什么。使用几何学读取器或其他方法来获得Marquee效果不是一种选择。

代码语言:javascript
复制
struct UILabelView : UIViewRepresentable {
    
    var text: String

    typealias UIViewType = MarqueeLabel

    func makeUIView(context: UIViewRepresentableContext<UILabelView>) -> MarqueeLabel {
        
        let label = MarqueeLabel()
        print(label.frame.size)
        label.text = text
        return label
        
    }
    
    func updateUIView(_ uiView: MarqueeLabel, context: UIViewRepresentableContext<UILabelView>) { }
    
}

我试过使用this,但没有效果。另外,我看过this Question,但没有答案。

视图的用法如下:

代码语言:javascript
复制
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)无助于此。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-04 11:24:52

默认情况下,它是由内部内容扩展到全宽度的,因此MarqueeLabel只是没有什么可滚动的东西--所有内容都在框架内。

在这种情况下,我们需要赋予父级将内部视图缩小到外部可用空间的能力(在这种情况下,按宽度显示)

因此,这里有一个减少阻力的固定优先级:

代码语言:javascript
复制
func makeUIView(context: UIViewRepresentableContext<UILabelView>) -> MarqueeLabel {

    let label = MarqueeLabel()
    label.text = text
    label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    //                                            ^^^^^ << this one !!
    return label

}

用Xcode 13.4 / iOS 15.5测试

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72855423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档