【问题标题】:Change label's font size dynamically when scrolling tableView滚动 tableView 时动态更改标签的字体大小
【发布时间】:2019-07-24 04:54:58
【问题描述】:

我有 tableView 和一个 imageView。使用本指南制作可拉伸标题https://github.com/abhimuralidharan/StretchableTableViewHeader-Swift 现在我必须在我的图像上添加标签。当 tableView 滚动时,这个标签应该改变大小/字体。

我在另一个类中创建了我的 imageView:

class LotteryHeaderView: UIImageView {

let ticketsCountLabel: UILabel = {
    let label = UILabel()
    label.textColor = .white
    label.translatesAutoresizingMaskIntoConstraints = false
    label.font = UIFont.boldSystemFont(ofSize: 100)
    return label
}()

let infoLabel: UILabel = {
    let label = UILabel()
    label.textColor = .white
    label.textAlignment = .center
    label.translatesAutoresizingMaskIntoConstraints = false
    label.font = UIFont.systemFont(ofSize: 13, weight: .medium)
    label.numberOfLines = 2
    label.text = Localizable.all_user_tickets_count()
    return label
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    self.addSubViews([ticketsCountLabel, infoLabel])

    ticketsCountLabel.centerX(to: self.centerXAnchor)
        .centerY(to: self.centerYAnchor)

    infoLabel.top(to: ticketsCountLabel.bottomAnchor, constant: 7)
        .width(constant: 184)
        .centerX(to: self.centerXAnchor)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}    

}

在我的控制器中初始化它:

let imageView = LotteryHeaderView(frame: CGRect(x: 0, y: 0, width: Constants.Size.screenWidth, height: 300))

在 viewDidLoad 中设置:

imageView.frame = CGRect(x: 0, y: 0, width: Constants.Size.screenWidth, height: 300)
    imageView.image = R.image.santa_fe()
    imageView.contentMode = .scaleAspectFill
    imageView.clipsToBounds = true
    view.addSubview(imageView)

这里的 func 每次滚动 tableview 时都会被调用,它适用于我的图像(它可折叠和可拉伸):

func scrollImageInHeader(scrollView: UIScrollView) {
    let y = 300 - (scrollView.contentOffset.y + 300)
    let height = min(max(y, 60), 450)
    imageView.frame = CGRect(x: 0, y: 0, width: Constants.Size.screenWidth, height: height)
}

尝试在 this StackOverFlowAnswer 下添加 scrollImageInHeader() 代码,但没有帮助

let offset = scrollView.contentOffset.y
    let scale = min(max(1.0 - offset / 200.0, 0.0), 1.0)
    imageView.ticketsCountLabel.transform = CGAffineTransform(scaleX: scale, y: scale)

请,任何帮助将不胜感激。

【问题讨论】:

    标签: swift scroll label font-size


    【解决方案1】:

    UIScrollView 是父 UITableViewController。您使用 UIScrollView 和 UIScrollViewDelegate 来设置带有 scrollOffset 的标签字体大小:CGFloat follow .y

    extension ViewController: UIScrollViewDelegate{
      func scrollViewDidScroll(_ scrollView: UIScrollView) {
        var scrollOffset : CGFloat = scrollView.contentOffset.y
        // process with scrollOffset
      }
    }
    

    【讨论】:

      【解决方案2】:

      其实我发现了我的错误。来自Here 的代码提供了帮助。 Class LotteryHeaderView 我改为 UIView 并在那里添加了一个 UIImageView。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        相关资源
        最近更新 更多