Динамически изменяйте размер шрифта метки при прокрутке tableView - PullRequest
0 голосов
/ 02 марта 2019

У меня есть 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 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)
}

Пытался добавить код scrollImageInHeader () под этим StackOverFlowAnswer , но это не помогло

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)

Пожалуйста, оцените любую помощь.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

На самом деле я нашел свою ошибку.Код от Здесь помогло.Класс LotteryHeaderView Я изменил на UIView и добавил туда UIImageView.

0 голосов
/ 02 марта 2019

UIScrollView является родительским UITableViewController.Вы используете UIScrollView с UIScrollViewDelegate для настройки размера шрифта метки с помощью scrollOffset: CGFloat follow .y

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