我如何在部分的左侧实现UITableView标头?

我已经通过以下代码添加了图片,但无法达到期望的效果:

func tableView(_ tableView: UITableView,viewForHeaderInSection section: Int) -> UIView? {

        let view = UIView(frame: CGRect(x: 0,y: 0,width: tableView.frame.size.width,height: 50))
        let image = UIImageView(frame: CGRect(x: 15,y: 10,width: 30,height: 30))

        let section = self.sections[section]

        switch section {
        case .phone:
            image.image = UIImage(systemName: "phone.fill")
            break
        case .mail:
            image.image = UIImage(systemName: "message.fill")
            break
        case .company:
            image.image = UIImage(systemName: "person.fill")
            break
        }
        view.addSubview(image)
        return view
    }

我要实现的目标的演示

我如何在部分的左侧实现UITableView标头?

deipfqu850726 回答:我如何在部分的左侧实现UITableView标头?

使用节标题不会实现此行为。我建议两个选择,

1-遵循iOS的标准,关于您的用例,标头应粘贴在顶部或根本不存在。

2-完成所需的设计后,您可以在屏幕上的该位置添加图像视图,然后继续跟踪包含下一张图像的单元格的偏移,然后更改与该偏移有关的固定ImageView以使其上下移动通过某些值。或者,然后您可以淡出并进入以获取下一个图像值。


我创建了一个简单的示例来说明如何实现此目标:

Demo

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-故事板 View Controller Storyboard

请注意:

1-“页眉ImageView大小和边距”等于UITableViewCell内部的“ ImageView大小和边距”。

2-然后,您可以在移动标题时轻松处理任何所需的动画。

检查存储库: https://github.com/amr-abdelfattah/iOS-IconicSideHeaderTableViewExample

让我知道您是否需要任何帮助。

本文链接:https://www.f2er.com/2779170.html

大家都在问