swift - 如何创建一个像 Apple Music 艺术家页面上的融合导航栏
问题描述
我正在尝试创建一个导航栏(屏幕截图中“热门歌曲”上方的所有内容),看起来就像 Apple Music 应用程序中艺术家页面中使用的导航栏。在 iPhone X 上,封面照片应该融入缺口区域(即安全区域之外)。我还希望能够将UILabels 等UI 元素添加到导航栏中。
截图: https ://i2.wp.com/9to5mac.com/wp-content/uploads/sites/6/2018/06/apple-music-artist-update.jpg
到目前为止,我已经尝试过使用 UITableViewController。我将表格视图的内容插入参数设置为“从不”,这似乎可以完成这项工作。但是,当表格视图已经在顶部单元格时向下拖动时,会显示 UITableView 的背景。向下拖动表格时,应拉伸第一个单元格的背景图像,而不是随着单元格内容移动。
谢谢。
解决方案
想出了一个解决方案:
首先,打开故事板,将一个 UIView 拖到“原型单元格”的顶部。然后,在视图控制器文件中定义以下全局变量:
var headerView: UIView!
var HEADER_HEIGHT: CGFloat = 400
要在滚动时更新标题视图(即拉伸),请在方法中调用以下函数scrollViewDidScroll
:
func updateTableHeader()
{
var headerFrame = CGRect(x: 0, y: -HEADER_HEIGHT, width: tableView.bounds.width, height: HEADER_HEIGHT)
if tableView.contentOffset.y < -HEADER_HEIGHT
{
headerFrame.origin.y = tableView.contentOffset.y
headerFrame.size.height = -tableView.contentOffset.y
}
headerView.frame = headerFrame
}
此外,在 中viewDidLoad
,应该使用以下方法配置 headerView:
func setupHeaderview()
{
headerView = tableView.tableHeaderView
tableView.tableHeaderView = nil
tableView.addSubview(headerView)
tableView.contentInset = UIEdgeInsets(top: HEADER_HEIGHT, left: 0, bottom: 0, right: 0)
tableView.contentOffset = CGPoint(x: 0, y: -HEADER_HEIGHT)
updateTableHeader()
}
推荐阅读
- javascript - 如何在 React 功能组件中使用 Splide 同步方法
- python - 将 LATEX 中的量子力学方程加载到 Sympy 中?
- android - 我在 android studio 中渲染 SVG 文件时遇到问题
- vba - 如何显示加载项管理器对话框?
- java - 用 selenium 替换 http 客户端
- python - 在 AWS Lambda Python 脚本中转发自定义错误
- python - 使用 Amazon Alexa 加载 json 文件
- sql - SQLSERVER - 有没有办法强制每行只有一位列为真,其他所有列为假?
- node.js - 当我渲染一个我想创建作者的页面时,为什么要传递模型?
- c# - 无法使用 Schematron.NET 验证 XML