Как преобразовать uilabel, сохраняя его положение x одинаковым и масштабировать, чтобы уменьшить размер шрифта - PullRequest
0 голосов
/ 27 сентября 2019

Я реализовал навигационный заголовок (uiview), который сжимается во время прокрутки tablview вверх и расширяется при прокрутке вниз.Точно так же, как заголовок приложения Ubsers IOS на странице профиля.Я могу изменить положение метки при прокрутке из нижнего правого угла, но как я могу уменьшить размер шрифта при прокрутке.Если я изменяю размер шрифта динамически, это дергается.Если я использую масштаб преобразования, то я не могу определить сумму, на которую мне нужно масштабировать метку для достижения определенного размера шрифта.когда большая позиция uialabel x равна 15 с размером шрифта 24, а при свернутой позиции x будет 45 с размером шрифта 20. Любое преимущество будет очень цениться.

func updateHeader() {
    let range = maximumHeaderHeight - minimumHeaderHeight
    let openAmount = headerHeightConstraint.constant - maximumHeaderHeight
    let percentage = openAmount / range
    headerLabelLeadingConstraint.constant = labelXPositionOfAnimationHeader - (openAmount)}

1 Ответ

0 голосов
/ 27 сентября 2019

Взять вид для заголовка и установить 6 ограничений (таким образом, максимальная высота нашего заголовка будет 100, а минимальная высота будет 50)

  1. Высота == 100 (приоритет: 750) (Создать IBOutlet для этого ограничения)
  2. Высота <= 100 (приоритет: 1000) </li>
  3. Высота> = 50 (приоритет: 1000)
  4. Trailing == 0
  5. Leading == 0
  6. Top == 0 (подключить его из строки состояния)

Добавьте метку в заголовок и установите 4 ограничения

  1. Top == 0
  2. Leading == 0
  3. Trailing == 0
  4. Bottom == 0

Добавить представление таблицы и установить 4 ограничения

  1. Top == 0 (подключить его изстрока состояния)
  2. Leading == 0
  3. Trailing == 0
  4. Bottom == 0

ViewController

class ViewController: UIViewController, UIScrollViewDelegate, UITableViewDelegate, UITableViewDataSource
{
    @IBOutlet weak var tableView : UITableView? = nil
    @IBOutlet weak var headerView : UIView? = nil
    @IBOutlet weak var headerLabel : UILabel? = nil
    @IBOutlet weak var headerHeightConstraint : NSLayoutConstraint? = nil
    private var headerHeight : CGFloat = 100
    private var topInset : CGFloat = 100 // TopInset == headerHeight
    private var maxFontSize : CGFloat = 32 


    override func viewDidLoad()
    {
        super.viewDidLoad()

        // TopInset == headerHeight
        tableView?.contentInset = UIEdgeInsets(top: topInset, left: 0, bottom: 0, right: 0)
    }

    func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 5
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        return 100.0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell()
        cell.textLabel?.text = "\(indexPath.row)"
        return cell
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView)
    {
        let y = scrollView.contentOffset.y + topInset
        headerHeightConstraint?.constant = headerHeight - y

        let fontSize = (maxFontSize * (headerView?.frame.height ?? 0))/(headerHeight)
        headerLabel?.font = UIFont.systemFont(ofSize: fontSize)
    }
}

enter image description here

...