使用节标题不会实现此行为。我建议两个选择,
1-遵循iOS的标准,关于您的用例,标头应粘贴在顶部或根本不存在。
2-完成所需的设计后,您可以在屏幕上的该位置添加图像视图,然后继续跟踪包含下一张图像的单元格的偏移,然后更改与该偏移有关的固定ImageView以使其上下移动通过某些值。或者,然后您可以淡出并进入以获取下一个图像值。
我创建了一个简单的示例来说明如何实现此目标:
1- TableView单元格
class CustomTableViewCell: UITableViewCell {
private var hasImage: Bool = false {
didSet {
self.hasImage ? self.showImage() : self.hideImage()
}
}
private var imagePlaceholder : UIImage {
UIImage.add // Any empty Image with same size
}
func bind(title: String,image: UIImage?) {
self.textLabel?.text = title
self.imageView?.image = image ?? imagePlaceholder
self.hasImage = image != nil
}
func hideImage() {
self.imageView?.isHidden = true
}
func showImage() {
if hasImage {
self.imageView?.isHidden = false
}
}
}
2- View Controller及其扩展名
class ViewController: UIViewController {
@IBOutlet weak var tableview: UITableView!
@IBOutlet weak var imageView: UIImageView!
private var items = [Int : [(String,UIImage?)]]()
private var sections = [UIImage]()
}
extension ViewController : UITableViewDataSource,UITableViewDelegate
{
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return self.items[section]?.count ?? 0
}
func numberOfSections(in tableView: UITableView) -> Int {
return self.sections.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let tableViewCell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell
if let itemData = self.items[indexPath.section]?[indexPath.row] {
tableViewCell.bind(title: itemData.0,image: itemData.1)
}
return tableViewCell
}
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
self.handleHeaderView()
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
self.handleHeaderView()
}
private func handleHeaderView() {
guard let visibleIndexPaths = self.tableview.indexPathsForVisibleRows,visibleIndexPaths.count > 0 else {
return
}
let firstVisibleIndexPath = visibleIndexPaths[0]
let sectionImage = self.sections[firstVisibleIndexPath.section]
self.imageView.image = sectionImage
if self.tableview.visibleCells.count > 0,let firstVisibleTableViewCell = self.tableview.visibleCells[0] as CustomTableViewCell {
firstVisibleTableViewCell.hideImage()
}
if self.tableview.visibleCells.count > 1,let secondVisibleTableViewCell = self.tableview.visibleCells[1] as? CustomTableViewCell {
secondVisibleTableViewCell.showImage()
}
}
}
3-故事板
请注意:
1-“页眉ImageView大小和边距”等于UITableViewCell内部的“ ImageView大小和边距”。
2-然后,您可以在移动标题时轻松处理任何所需的动画。
检查存储库:
https://github.com/amr-abdelfattah/iOS-IconicSideHeaderTableViewExample
让我知道您是否需要任何帮助。
本文链接:https://www.f2er.com/2779170.html