Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save bubudrc/2020c1c4baf53de34ed7b13ba93e0f2d to your computer and use it in GitHub Desktop.
Save bubudrc/2020c1c4baf53de34ed7b13ba93e0f2d to your computer and use it in GitHub Desktop.

Revisions

  1. @Chronos2500 Chronos2500 created this gist May 13, 2025.
    5 changes: 5 additions & 0 deletions MarqueeLabel-Minimal.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    let label = UILabel()
    label.text = "Swift is a modern, intuitive programming language crafted for all Apple platforms."
    label.setValue(true, forKey: "marqueeEnabled")
    label.setValue(true, forKey: "marqueeRunning")
    label.setValue(0, forKey: "marqueeRepeatCount")
    67 changes: 67 additions & 0 deletions MarqueeLabel.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    //
    // MarqueeLabel.swift
    // PrivateAPISample
    //
    // Created by Chronos2500 on 2025/05/13.
    //

    import SwiftUI

    fileprivate let text = """
    Swift is a modern, intuitive programming language crafted for all Apple platforms.
    """

    struct MarqueeLabelView: View {
    var body: some View {
    MarqueeLabel(
    text,
    font: .preferredFont(forTextStyle: .title1)
    )
    }
    }

    struct MarqueeLabel: UIViewRepresentable {
    var text: String
    var repeatCount: Int
    var font: UIFont
    var textColor: UIColor

    init(
    _ text: String,
    repeatCount: Int = 0,
    font: UIFont = .preferredFont(forTextStyle: .body),
    textColor: UIColor = .label
    ) {
    self.text = text
    self.repeatCount = repeatCount
    self.font = font
    self.textColor = textColor
    }

    func makeUIView(context: Context) -> UILabel {
    let label = UILabel()
    label.text = text
    label.textAlignment = .natural
    label.font = font
    label.textColor = textColor
    label.backgroundColor = .clear
    label.numberOfLines = 1
    label.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    label.setContentHuggingPriority(.defaultLow, for: .horizontal)
    label.setContentHuggingPriority(.required, for: .vertical)
    label.setContentCompressionResistancePriority(.required, for: .vertical)
    label.adjustsFontForContentSizeCategory = true
    label.setValue(true, forKey: "marqueeEnabled")
    label.setValue(true, forKey: "marqueeRunning")
    label.setValue(repeatCount, forKey: "marqueeRepeatCount")
    label.setValue(40, forKey: "marqueeLoopPadding")
    label.setValue(true, forKey: "marqueeUpdatable")
    return label
    }
    func updateUIView(_ uiView: UILabel, context: Context) {
    }
    }

    #Preview {
    MarqueeLabelView()
    }