gpt4 book ai didi

ios - 如何变换 uilabel 保持其 x 位置相同并缩放以减小字体大小

转载 作者:行者123 更新时间:2023-11-29 05:26:21 24 4
gpt4 key购买 nike

我实现了一个导航标题(uiview),它在向上滚动 tablview 时缩小,在向下滚动时扩展。与个人资料页面中的 ubers 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)}

最佳答案

获取标题 View 并设置 6 个约束(因此标题的最大高度将为 100,最小高度将为 50)

  1. 高度 == 100(优先级:750)(为此约束创建 IBOutlet)
  2. 高度 <= 100(优先级:1000)
  3. 高度 >= 50(优先级:1000)
  4. 尾随 == 0
  5. 领先 == 0
  6. Top == 0 (从状态栏连接)

在标题 View 内添加标签并设置 4 个约束

  1. 顶部 == 0
  2. 领先 == 0
  3. 尾随 == 0
  4. 底部 == 0

添加表格 View 并设置 4 个约束

  1. Top == 0 (从状态栏连接)
  2. 领先 == 0
  3. 尾随 == 0
  4. 底部 == 0

View Controller

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

关于ios - 如何变换 uilabel 保持其 x 位置相同并缩放以减小字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58131171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com