Взять вид для заголовка и установить 6 ограничений (таким образом, максимальная высота нашего заголовка будет 100, а минимальная высота будет 50)
- Высота == 100 (приоритет: 750) (Создать IBOutlet для этого ограничения)
- Высота <= 100 (приоритет: 1000) </li>
- Высота> = 50 (приоритет: 1000)
- Trailing == 0
- Leading == 0
- Top == 0 (подключить его из строки состояния)
Добавьте метку в заголовок и установите 4 ограничения
- Top == 0
- Leading == 0
- Trailing == 0
- Bottom == 0
Добавить представление таблицы и установить 4 ограничения
- Top == 0 (подключить его изстрока состояния)
- Leading == 0
- Trailing == 0
- 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)
}
}