Ios 如何变换uilabel使其x位置保持不变并缩放以减小字体大小

Ios 如何变换uilabel使其x位置保持不变并缩放以减小字体大小,ios,swift,core-animation,Ios,Swift,Core Animation,我实现了一个导航标题(uiview),它在向上滚动tablview时收缩,向下滚动时扩展。与个人资料页面中的Uber ios应用程序标题完全相同。我可以在从下到右上角滚动时更改标签位置,但如何在滚动时降低字体大小。如果我动态地改变字体大小,那就是颠簸。如果使用transform scale,则无法计算缩放标签以达到特定字体大小所需的量。当较大的uialabel x位置为15时,字体大小为24;当折叠时,x位置为45,字体大小为20。任何线索都将不胜感激 func updateHeader() {

我实现了一个导航标题(uiview),它在向上滚动tablview时收缩,向下滚动时扩展。与个人资料页面中的Uber ios应用程序标题完全相同。我可以在从下到右上角滚动时更改标签位置,但如何在滚动时降低字体大小。如果我动态地改变字体大小,那就是颠簸。如果使用transform scale,则无法计算缩放标签以达到特定字体大小所需的量。当较大的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)}

查看收割台并设置6个限制条件(因此收割台的最大高度为100,最小高度为50)

  • 高度==100(优先级:750)(为此约束创建IBOutlet)
  • 高度=50(优先级:1000)
  • 尾随==0
  • 前导==0
  • Top==0(从状态栏连接它)
  • 在页眉视图中添加标签并设置4个约束

  • Top==0
  • 前导==0
  • 尾随==0
  • 底部==0
  • 添加表视图并设置4个约束

  • Top==0(从状态栏连接它)
  • 前导==0
  • 尾随==0
  • 底部==0
  • 视图控制器

    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)
        }
    }
    

    谢谢Sunil的回复。。。我也像你说的那样做了,但我希望标签从左下角转换到右上角。具体来说,我希望它从领先的15px转换到领先的45px,效果更小。我怎么做,好的,我知道了。我已经根据您的要求快速更新了项目,我已经添加了一些约束,将标签从左到右、从下到上移动。虽然我认为必须有一个更好的方法来做这件事,而不是玩弄约束。非常感谢Sunil。。。你救了我一天。对我来说完美的答案。。。